7.Leetcode53 Maximum Subarray 笔记

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.

找出一组数字中最大的连续数字的和

2:题目分析

这个题,一看就感觉特别容易,用了双指针然后就贴了代码。然额……

之后在网上搜了一下,原来还有神奇的“线性时间算法”,遍历一次直接出结果 w(゚Д゚)w

①设i<=k<=j,max=Σnums[i,j],如果Σnums[i,k]<0,则Σnums[k,j]>Σnums[i,j],假设不成立,所以说和最大的连续数字中不会有连续数字前缀为负的情况。

②在这组数字中取断点,把前缀为负的情况分离开,之后比较大小

3:解题思路

 1  def maxSubArray(self, nums):
 2         """
 3         :type nums: List[int]
 4         :rtype: int
 5         """
 6         i=0
 7         sum=0
 8         max_sum=-2**31   #把最大值设为最小
 9         while i<len(nums):  
10             sum+=nums[i]    #只计算前缀的数字和
11             max_sum=max(sum,max_sum)  #取数值最大的前缀和
12             if sum<0:           #遇见前缀为零的情况,sum归零
13                 sum=0
14             i=i+1
15         return max_sum

4:解题感悟

这个算法真的好神奇,长见识了(#^.^#)

原文地址:https://www.cnblogs.com/19991201xiao/p/8409764.html