【每日一题记录】1800. 最大升序子数组和

68 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

大家好 我是丝瓜咸蛋汤。今天带来的是一道在LeetCode上的题目,题目难度为简单。就在此为大家分享一下解答思路。

题目阐述

给你一个正整数组成的数组 nums ,返回 nums 中一个 升序 子数组的最大可能元素和。

子数组是数组中的一个连续数字序列。

已知子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,若对所有 i(l <= i < r),numsi < numsi+1 都成立,则称这一子数组为 升序 子数组。注意,大小为 1 的子数组也视作 升序 子数组。

来源:力扣(LeetCode)

思路阐述

没啥好说的 简单模拟 :
一遍遍历,每一次都用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

我是丝瓜咸蛋汤
一名热爱阿森纳的前端工程师
如果本文对您有帮助,可以给一个免费的赞吗?谢谢!

名片.jpg