「每日LeetCode」2021年5月24日

本文最后更新于:2023年3月19日 晚上

Lt1800. 最大升序子数组和

1800. 最大升序子数组和

给你一个正整数组成的数组 nums ,返回 nums 中一个 升序  **子数组的最大可能元素和。
子数组是数组中的一个连续数字序列。
已知子数组 [nums, nums, ..., nums, nums] ,若对所有 il <= i < r),nums< nums 都成立,则称这一子数组为 **升序
子数组。注意,大小为 1 的子数组也视作 升序 子数组。
 示例 1:

1
2
3
输入:nums = [10,20,30,5,10,50]
输出:65
解释:[5,10,50] 是元素和最大的升序子数组,最大元素和为 65 。

示例 2:

1
2
3
输入:nums = [10,20,30,40,50]
输出:150
解释:[10,20,30,40,50] 是元素和最大的升序子数组,最大元素和为 150

示例 3:

1
2
3
输入:nums = [12,17,15,13,10,11,12]
输出:33
解释:[10,11,12] 是元素和最大的升序子数组,最大元素和为 33 。

示例 4:

1
2
输入:nums = [100,10,1]
输出:100

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100

将字符串和 0101 或 101010…进行比较,把每一位不同的计数记录下来,取小的那一个返回

思路

遍历数组,用 prev 记录前一个数,判断当前是否还在一个升序子数组内,temp 记录当前子数组的和。遍历时当当前数字小于等于前一个数字时,更新最大的子数组和。最后返回。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* @param {number[]} nums
* @return {number}
*/
var maxAscendingSum = function (nums) {
let max = 0,
prev,
temp = 0;
for (const num of nums) {
if (prev) {
if (num <= prev) {
max = Math.max(max, temp);
temp = 0;
}
}
prev = num;
temp += num;
}
return Math.max(max, temp);
};