题目地址:
https://leetcode.com/problems/maximum-ascending-subarray-sum/
给定一个长 n n n的正整数数组 A A A,求和最大的严格增子数组的和。长度为 1 1 1也算递增子数组。
由于 A [ i ] > 0 A[i]>0 A[i]>0,所以要和最大等价于要最长。所以每次都尽量找最长的且递增的子数组,然后求一个和去更新答案,然后从下一个位置重新开始找,这样一直下去即可。代码如下:
public class Solution {
public int maxAscendingSum(int[] nums) {
int res = 0;
for (int i = 0, sum = 0; i < nums.length; i++) {
sum = nums[i];
int j = i + 1;
while (j < nums.length && nums[j] > nums[j - 1]) {
sum += nums[j];
j++;
}
res = Math.max(res, sum);
i = j - 1;
}
return res;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。