![]()
解题思路:这题思路有很多,动态规划,前缀和等,前缀和就是遍历一遍,将每个前缀和与前面最小的前缀和相减,就能得到最大值,然后比较与记录最大值。(还有一种思路就是首先明确最大子串内部一定不会存在某个边缘子串小于0,所以可以遍历一遍先记录继续记录前缀和,然后比较max,当某一个元素进入后前缀和小于0,说明这个之前的这个子串不可能在最大子串中,或者前面已经存在最大子串,前缀和的值清0,从下一个元素继续计算,然后比较)
class Solution {
public int maxSubArray(int[] nums) {
int min = 0;
int max = Integer.MIN_VALUE;
int sum = 0;
for(int num:nums){
sum+=num;
max = Math.max(sum-min,max);
min = Math.min(min,sum);
}
return max;
}
}
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res = -10**4
ans = 0
for i in range(len(nums)):
ans += nums[i]
if ans>res:
res = ans
if ans<0:
ans = 0
return res