1800. 最大升序子数组和
1800. 最大升序子数组和
题目
Given an array of positive integers nums, return the _maximum possible sum of anascending subarray in _nums.
A subarray is defined as a contiguous sequence of numbers in an array.
A subarray [numsl, numsl+1, ..., numsr-1, numsr] is ascending if for all i where l <= i < r, numsi < numsi+1. Note that a subarray of size 1 is ascending.
Example 1:
Input: nums = [10,20,30,5,10,50]
Output: 65
Explanation:[5,10,50] is the ascending subarray with the maximum sum of 65.
Example 2:
Input: nums = [10,20,30,40,50]
Output: 150
Explanation:[10,20,30,40,50] is the ascending subarray with the maximum sum of 150.
Example 3:
Input: nums = [12,17,15,13,10,11,12]
Output: 33
Explanation:[10,11,12] is the ascending subarray with the maximum sum of 33.
Constraints:
1 <= nums.length <= 1001 <= nums[i] <= 100
题目大意
给你一个正整数组成的数组 nums ,返回 nums 中一个 升序 子数组的最大可能元素和。
子数组是数组中的一个连续数字序列。
已知子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,若对所有 i(l <= i < r),numsi < numsi+1 都成立,则称这一子数组为 升序 子数组。注意,大小为 1 的子数组也视作 升序 子数组。
示例 1:
输入: nums = [10,20,30,5,10,50]
输出: 65
解释:[5,10,50] 是元素和最大的升序子数组,最大元素和为 65 。
示例 2:
输入: nums = [10,20,30,40,50]
输出: 150
解释:[10,20,30,40,50] 是元素和最大的升序子数组,最大元素和为 150 。
示例 3:
输入: nums = [12,17,15,13,10,11,12]
输出: 33
解释:[10,11,12] 是元素和最大的升序子数组,最大元素和为 33 。
示例 4:
输入: nums = [100,10,1]
输出: 100
提示:
1 <= nums.length <= 1001 <= nums[i] <= 100
解题思路
初始化
sum和maxSum为数组的第一个元素。遍历数组,从第二个元素开始:
- 如果当前元素大于前一个元素,说明当前递增子数组还在继续,累加当前元素到
sum。 - 如果当前元素不大于前一个元素,说明递增子数组结束了,更新
maxSum为当前的sum,然后重置sum为当前元素。
- 如果当前元素大于前一个元素,说明当前递增子数组还在继续,累加当前元素到
遍历完成后,我们需要再返回一次
maxSum或sum中的较大值,确保计算包括最后一个递增子数组。
复杂度分析
- 时间复杂度:
O(n),其中n是数组的长度,遍历数组一次。 - 空间复杂度:
O(1),只使用常数空间来存储sum和maxSum。
代码
/**
* @param {number[]} nums
* @return {number}
*/
var maxAscendingSum = function (nums) {
let sum = nums[0],
maxSum = nums[0];
for (let i = 1; i < nums.length; i++) {
if (nums[i] > nums[i - 1]) {
sum += nums[i];
} else {
maxSum = Math.max(maxSum, sum);
sum = nums[i];
}
}
return Math.max(maxSum, sum);
};
相关题目
| 题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
|---|---|---|---|---|---|
| 2100 | 适合野炊的日子 | 数组 动态规划 前缀和 | 🟠 | 🀄️ 🔗 | |
| 2355 | 你能拿走的最大图书数量 🔒 | 栈 数组 动态规划 1+ | 🔴 | 🀄️ 🔗 | |
| 2393 | 严格递增的子数组个数 🔒 | 数组 数学 动态规划 | 🟠 | 🀄️ 🔗 |
