剑指offer-30-连续子数组的最大和

连续子数组的最大和_牛客网

https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=13&tqId=11183&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)

这题目应该是最基础的动态规划的题目:最大子数组的和一定是由当前元素和之前最大连续子数组的和叠加在一起形成的,因此需要遍历n个元素,看看当前元素和其之前的最大连续子数组的和能够创造新的最大值。

public c

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

小白刷剑指offer 文章被收录于专栏

跟着小白一起刷剑指offer,通过讨论加深印象吧~ 没有人不学习就能够掌握知识,知识就是需要学习的~

全部评论
并不需要用一个数组维护当前下标之前的连续最大值,用一个变量维护就足够了 int maxSum = array[0]; int localMaxSum = array[0]; for (int i=1;i<array.length;i++){ localMaxSum = Math.max(array[i],localMaxSum+array[i]); maxSum = Math.max(localMaxSum,maxSum); } return maxSum;
6
送花
回复
分享
发布于 2019-12-13 11:19
"之前连续子数组"必须包含数组的最后一个数。比如3,3,-1,6不能说是3,3,6。应该是这样吧。
点赞
送花
回复
分享
发布于 2019-11-22 12:43
滴滴
校招火热招聘中
官网直投
嗯嗯,看大佬很多题解都收获很大
点赞
送花
回复
分享
发布于 2019-11-22 13:36
66
点赞
送花
回复
分享
发布于 2019-11-23 10:29
我发现你不是很喜欢分析临界值-_-
点赞
送花
回复
分享
发布于 2020-02-10 00:59
解释一下楼主算法的意思:dp[i]的含义是"以第i个元素为右边界的连续子序列所能取到的最大值",它是在右边界确定的情况下、所有可能的左边界中取的最大的情况。我们最后在所有dp[i]中选最大的,其实是在选右边界,以确定最终的连续子序列的范围
点赞
送花
回复
分享
发布于 2020-03-05 22:38
按照用例,为什么我觉得最后返回的是 7,而不是 8 呢?
点赞
送花
回复
分享
发布于 2020-09-07 09:30

相关推荐

33 收藏 评论
分享
牛客网
牛客企业服务