持续创作,加速成长!这是我参与「掘金日新计划 · 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
};