[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.
解法一:枚举法
分析:
这题目最直观的做法是穷举法,二层循环,在第二层上面依次叠加数据,记录叠加过程中出现的最大值
代码:
![](https://img-blog.csdn.net/20170927103123938)
解法二:分治法
分析:
最大子序列可能在三个地方出现,或者在左半部,或者在右半部,或者跨越输入数据的中部而占据左右两部分。前两种情况递归求解,第三种情况的最大和可以通过求出前半部分最大和(包含前半部分最后一个元素)以及后半部分最大和(包含后半部分的第一个元素)相加而得到。
代码:
![](https://img-blog.csdn.net/20170927103451573)
解法三
该解法来源于leetcode讨论区,复杂度达到了线性,o(n)
重点的一个思想是:如果a[i]是负数那么它不可能代表最有序列的起点,因为任何包含a[i]的作为起点的子序列都可以通过用a[i+1]作为起点来改进。类似的有,任何的负的子序列不可能是最优子序列的前缀。
题目:
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]作为起点来改进。类似的有,任何的负的子序列不可能是最优子序列的前缀。
相关文章推荐
- 第四周作业2(LeetCode442)
- Leetcode 169. Majority Element (第四周作业)
- 算法课程Leetcode作业第四周技术博客
- 第一周作业1(LeetCode7)
- 马哥2016全新Linux+Python高端运维班第四周作业
- 第四周作业(续集)
- 马哥运维班第四周作业
- 第四周作业——无向图的DFS算法
- Coursera deep learning 吴恩达 神经网络和深度学习 第四周 编程作业 Building your Deep Neural Network
- N26-第四周作业
- 第四周作业 -- 图的表示
- 【算法作业3】LeetCode 169. Majority Element
- 吴恩达深度学习第一课第四周课后作业1参考
- 【高级编程技术】第四周作业
- Python第四周第一次作业
- Leetcode120 Triangle (第八周作业)
- 【算法作业14】LeetCode 413. Arithmetic Slices
- Andrew Ng-Neural Networks and Deep Learning 第四周作业【1】
- 第四周——第八章函数作业
- 第四周作业