A real loser is someone so afraid of not wining, they don't even try.
真正的失败者是那些害怕失败不敢尝试的人。
问题描述
来源:LeetCode第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
问题分析
这题可以参照《486,动态规划解最大子序和》使用动态规划来解决,但实际上不需要dp数组也可以解决。这题让求的是升序子数组的最大和,解题思路如下
使用一个变量sum记录子数组的和
当递增的时候,sum就累加
当递减的时候,把当前元素的值赋值给sum,也就是重新开始统计
使用一个变量max记录遍历过的升序子数组的最大和
如下图所示
原理比较简单,来看下代码
时间复杂度:O(n)
空间复杂度:O(1)
本文原创,未经作者允许不可转载!
更多内容,欢迎关注作者微信公众号:数据结构和算法!
暂无评论
违反法律法规
侵犯个人权益
有害网站环境