原题指路
题目描述
给你一个正整数组成的数组 nums
,返回 nums
中一个 升序 子数组的最大可能元素和。
子数组是数组中的一个连续数字序列。
已知子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,若对所有 i
(l <= i < r
),numsi < numsi+1
都成立,则称这一子数组为 升序 子数组。注意,大小为 1
的子数组也视作 升序 子数组。
解题思路
这道题用动态规划即可解决问题,在每次递增子数组结束时,用状态转移方程更新一下即可。
时间复杂度:
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
1
)
O(1)
O(1)
代码
class Solution
{
public:
int maxAscendingSum(vector<int>& nums)
{
int sum = nums[0], temp = nums[0];
for(int i = 1; i < nums.size(); i++)
if(nums[i] > nums[i - 1])
temp += nums[i];
else
{
if(temp > sum)
sum = temp;
temp = nums[i];
}
if(temp > sum)
sum = temp;
return sum;
}
};