
最大升序子数组和
初始化变量:我们使用两个变量 遍历数组:从数组的第一个元素开始遍历,逐个元素检查是否满足升序条件。 更新最大值:在遍历结束后,再次检查
发布日期:2021-05-08 00:00:38
浏览次数:23
分类:精选文章
本文共 1296 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要找到数组中的一个升序子数组,其元素和最大。升序子数组是指数组中连续的数字序列,其中每个元素都比前一个大。单个元素的子数组也被视为升序子数组。
方法思路
我们可以使用动态规划来解决这个问题。具体步骤如下:
max_sum
和 current_sum
。max_sum
用于记录当前遍历到的位置的最大升序子数组的和,而 current_sum
用于记录从某个起始位置开始的当前递增子数组的和。- 如果当前元素大于前一个元素,则将
current_sum
加上当前元素的值。 - 如果当前元素不大于前一个元素,则将
current_sum
重置为当前元素的值,并检查是否需要更新max_sum
。
current_sum
是否大于 max_sum
,以确保最后一个递增子数组的和被考虑进去。这种方法的时间复杂度是 O(n),空间复杂度是 O(1),因为我们只使用了有限的变量来保存中间结果。
解决代码
#includeusing namespace std;int maxAscendingSum(vector nums) { if (nums.empty()) return 0; int max_sum = nums[0]; int current_sum = nums[0]; for (int i = 1; i < nums.size(); ++i) { if (nums[i] > nums[i-1]) { current_sum += nums[i]; } else { if (current_sum > max_sum) { max_sum = current_sum; } current_sum = nums[i]; } } if (current_sum > max_sum) { max_sum = current_sum; } return max_sum;}
代码解释
- 初始化:首先检查数组是否为空,如果为空则返回 0。否则,初始化
max_sum
和current_sum
为数组的第一个元素。 - 遍历数组:从第二个元素开始遍历,检查当前元素是否大于前一个元素。如果是,则将
current_sum
加上当前元素的值;否则,重置current_sum
为当前元素的值,并检查是否需要更新max_sum
。 - 更新最大值:在遍历结束后,再次检查
current_sum
是否大于max_sum
,以确保最后一个递增子数组的和被考虑进去。
这种方法高效且简洁,能够在 O(n) 时间内找到最大升序子数组的和。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年05月03日 02时01分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux shell 编程 9 脚本中调用脚本
2025-04-06
Linux shell (ssh批量配置免秘)读取配置文件,进行远程操作
2025-04-06
Linux Shell——流程控制
2025-04-06
Linux Shell之三 高级变量及字符串
2025-04-06
Linux Shell编程新手入门教程(六)
2025-04-06
Linux Shell编程最重要的十个核心概念,零基础入门到精通,收藏这一篇就够了
2025-04-06
Linux Shell编程(19)——测试与分支
2025-04-06
Linux Shell脚本入门--grep命令详解
2025-04-06
Linux Shell脚本处理JSON字符串
2025-04-06
Linux Shell脚本通过参数名传递参数
2025-04-06
Linux Shell语言并发执行多条命令
2025-04-06
Linux signal
2025-04-06
Linux SNMP支持IPv6配置实战
2025-04-06
Linux Socket学习--域和套接口简介
2025-04-06
linux sort 用法
2025-04-06
Linux stat命令和AIX istat命令 (查看文件修改时间)
2025-04-06
Linux sudo命令详解
2025-04-06
Linux tail 命令详解
2025-04-06
linux tar 备份命令
2025-04-06