Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
示例:given the array [-2,1,-3,4,-1,2,1,-5,4]
,
the contiguous subarray [4,-1,2,1]
has the largest sum = 6
.
题目分析:找到一组数中连续的几个数所构成的最大和。网上说,这是一个典型的贪心算法的例子,因为我不太了解这个例子,所以,找了个讲解,在下面。
补充:当我在网上查找关于贪心算法的讲解时,还发现了另一种方法叫动态规划法。这两种方法差不多,目前来看都可以为这道题提供解题思路。 动态规划:点击打开链接 贪心算法:点击打开链接 贪心算法与动态规划的区别:点击打开链接
方法一:
- 思路:根据‘动态规划’和‘贪心算法’可以得出,解决此类问题的关键在于设置一个变量存放以当前元素为最长子数组的最后一个元素。用所能达到的最大和,以及之前所达到的最大和进行对比(这里是用到动态规划,需要理解与贪心算法的区别。动态规划可以保存之前的最大值)
- 思路:以下所写都是我在做题过程中想到的方法。首先判断正负,用第一个数和第二个数比较,如果第一个数>=第二个数,则两数相加,将得到的和存在一个变量中,与下一个数作比较。否则,从第二个数开始。 用到递归调用。
- 代码:
class Solution(object): def maxSubArray(self, nums): if len(nums) == 0: return 0 curr_sum = nums[0] max_sum = nums[0] for i in range(1, len(nums)): curr_sum = max(nums[i], curr_sum + nums[i]) max_sum = max(max_sum, curr_sum) return max_sum