您的位置:首页 > 其它

[leetcode] 第四周作业

2017-09-27 10:40 323 查看
题目来源: 53.Maximum Subarray

题目:

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [-2,1,-3,4,-1,2,1,-5,4],

the contiguous subarray [4,-1,2,1] has the largest sum = 6.

解法一:枚举法

分析:

这题目最直观的做法是穷举法,二层循环,在第二层上面依次叠加数据,记录叠加过程中出现的最大值

代码:



解法二:分治法

分析:

最大子序列可能在三个地方出现,或者在左半部,或者在右半部,或者跨越输入数据的中部而占据左右两部分。前两种情况递归求解,第三种情况的最大和可以通过求出前半部分最大和(包含前半部分最后一个元素)以及后半部分最大和(包含后半部分的第一个元素)相加而得到。

代码:



解法三

该解法来源于leetcode讨论区,复杂度达到了线性,o(n)

重点的一个思想是:如果a[i]是负数那么它不可能代表最有序列的起点,因为任何包含a[i]的作为起点的子序列都可以通过用a[i+1]作为起点来改进。类似的有,任何的负的子序列不可能是最优子序列的前缀。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: