持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
大家好 我是丝瓜咸蛋汤。今天带来的是一道在LeetCode上的题目,题目难度为简单
。就在此为大家分享一下解答思路。
题目阐述
给你一个正整数组成的数组 nums ,返回 nums 中一个 升序 子数组的最大可能元素和。
子数组是数组中的一个连续数字序列。
已知子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,若对所有 i(l <= i < r),numsi < numsi+1 都成立,则称这一子数组为 升序 子数组。注意,大小为 1 的子数组也视作 升序 子数组。
思路阐述
没啥好说的 简单模拟 :
一遍遍历,每一次都用cur去记录累加值,然后再用cur和ans比较得出最大值。
代码实现
function maxAscendingSum(nums: number[]): number {
let head = nums[0]
if (nums.length == 1)
return head
else {
let cur = nums[0]
let ans = nums[0]
for (let i = 1; i < nums.length; i++) {
if (nums[i - 1] < nums[i]) cur += nums[i]
else cur = nums[i]
ans = Math.max(ans, cur)
}
return ans
}
};
代码评价
执行结果:
通过
执行用时:64 ms, 在所有 TypeScript 提交中击败了81.82%的用户
内存消耗:42.4 MB, 在所有 TypeScript 提交中击败了36.36%的用户
通过测试用例:104 / 104
其他解法
官方这个解法,使用了一个【滚动数组】来进行空间优化:
var maxAscendingSum = function(nums) {
let res = 0;
let l = 0;
while (l < nums.length) {
let cursum = nums[l++];
while (l < nums.length && nums[l] > nums[l - 1]) {
cursum += nums[l++];
}
res = Math.max(res, cursum);
}
return res;
};
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/maximum-ascending-subarray-sum/solution/zui-da-sheng-xu-zi-shu-zu-he-by-leetcode-0q6v/
来源:力扣(LeetCode)
我是丝瓜咸蛋汤
一名热爱阿森纳的前端工程师
如果本文对您有帮助,可以给一个免费的赞吗?谢谢!