题目来源: 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] 第四周作业

  • 解法二:分治法

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

代码:
[leetcode] 第四周作业

  • 解法三
    该解法来源于leetcode讨论区,复杂度达到了线性,o(n)
    重点的一个思想是:如果a[i]是负数那么它不可能代表最有序列的起点,因为任何包含a[i]的作为起点的子序列都可以通过用a[i+1]作为起点来改进。类似的有,任何的负的子序列不可能是最优子序列的前缀。

[leetcode] 第四周作业

相关文章:

猜你喜欢
  • 2021-11-29
  • 2021-12-05
相关资源
相似解决方案