leetcode刷题记录-1800. 最大升序子数组和

71 阅读1分钟

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

前言

今天的题目为简单,理解题目,通过简单的模拟就能够得出题目的答案。

每日一题

今天的题目是 1800. 最大升序子数组和,难度为简单

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

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

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

 

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

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

 

提示:

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

题解

模拟

根据题意进行模拟,我们需要找到一个数字数组中,升序排列的子数组中,相加起来最大的那个,子数组代表前后相连接,没有隔断的数组元素的集合

那么在一个数组当中,就只可能是存在着多个子数组,那我们只需要拿到每一个子数组的相加结果大小,然后进行对比,就可以得到我们最后想要的那个最大升序子数组。

拿题目中的 [12,17,15,13,10,11,12] 来举例,第一个升序子数组为 [12,17] 加起来为 29,第二个升序子数组为 [15] ,第三个为 [13],第四个为 [10,11,12] ,加起来为33 ,所以题目要求的最大元素和为 33.

function maxAscendingSum(nums: number[]): number {
   let res = 0;
    let cur = 0;
    let last = 0;
    nums.forEach(item => {
        if (item <= last) {
            res = Math.max(cur, res)
            cur = 0
        }
        cur += item
        last = item
    })
    res = Math.max(cur, res)
    return res
};

image.png