【牛客刷题 - 算法】 NC19 连续子数组的最大和
@[toc]
1.题目描述
描述输入一个长度为 n 的整型数组 array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为 1。求所有子数组的和的最大值。数据范围:
要求: 时间复杂度为 O(n)O(n),空间复杂度为 O(n)O(n)进阶: 时间复杂度为 O(n)O(n),空间复杂度为 O(1)O(1)
2.算法设计思路
这题感觉与之前的一个题:买卖股票的最好时机 有共通之处。
首先我们要意识到,对于题中的输入数据规模,“枚举出所有的连续子数组,对它们分别求和,然后找到最大值”的方案是不可行的(因为该方案的时间开销随数据规模呈指数增长)。
于是这里有另一个方案:
第 i 个元素作为我们最终的子数组的末位元素时,将能得到的最大子数组和记为
假设我们已经知道的值,就可以很简单地求出,即:
这样我们仅需一次遍历,即可得到最终的解。
精髓就在于,在==搜索的过程种充分利用前面所得到的信息==。
3.算法实现
注:这里并不是完整代码,而只是核心代码的模式
复制代码
4.运行结果
成功通过!
结束语:
触类旁通,刷题就要向这个目标前进,加油!
今天的分享就到这里啦,快来加入刷题大军叭!👉点击开始刷题学习👈
感谢阅读
个人主页:清风莫追
CSDN话题挑战赛第2期参赛话题:学习笔记
版权声明: 本文为 InfoQ 作者【清风莫追】的原创文章。
原文链接:【http://xie.infoq.cn/article/cc24e310b386e1ba5f9319308】。文章转载请联系作者。
评论