【算法】最大子序和:贪心算法 & 动态规划
解法一 贪心算法:
- 变量 cur_sum 存储当前的和,max_sum 存储最大的和
- 如果 cur_sum 为负,则遍历下一个元素时,丢掉cur_sum,cur_sum为下一个元素的值。
- 时间复杂度:O(n),其中 n 为 nums 数组的长度。我们只需要遍历一遍数组即可求得答案。
- 空间复杂度:O(1)。我们只需要常数空间存放若干变量。
def maxSubArray(self, nums): """ :type nums: List[int] :rtype: int """ max_sum = None last_sum = None cur_sum = None for i in nums: if max_sum == None: max_sum = i cur_sum = i else: if cur_sum < 0: cur_sum = i else: cur_sum = cur_sum + i if cur_sum>max_sum: max_sum = cur_sum return max_sum
解法二 动态规划:
- 遍历数组,如果前一项>0,则当前项=前一项+当前项
- 取当前数组的最大值
- 时间复杂度:O(n)
- 空间复杂度:O(1)
class Solution(object): def maxSubArray(self, nums): """ :type nums: List[int] :rtype: int """ for i in range(1, len(nums)): if nums[i-1]>0: nums[i] = nums[i]+nums[i-1] return max(nums)