Maximum Subarray
题目:
Given an array of integers, find a contiguous subarray which has the largest sum.
分析:
一样的题目:Best time to buy and sell stock
凡是和subarray子数组相关的问题,都要想到子数组和是俩前缀和相减(惯用套路)nums[i...j] = sum[j]-sum[i-1]
最后强调一点,这道题目强调顺序,应该先做maxSum,后做minSum,这也保证了当数组只有一个元素的时候,依然符合规律。
前缀和做法,和LocalMax
http://blog.hyoung.me/cn/2017/02/maximum-subarray/
解法:
注意此处minSUM要在ret后更新,并且注意3个变量的初始值。
public int maxSubArray(int[] nums) {
// write your code
int minSum =0, ret = Integer.MIN_VALUE;
int sum = 0;
for(int i = 0; i < nums.length; i++){
sum += nums[i];
ret = Math.max(ret, sum-minSum);
minSum = Math.min(minSum, sum);//这里保存min可以省一个loop
}
return ret;
}
public int maxSubArray(int[] nums) {
// write your code
int localMax =0, globalMax = Integer.MIN_VALUE;
for(int i = 0; i < nums.length; i++){
localMax += nums[i];
globalMax = Math.max(globalMax, localMax);
localMax = Math.max(localMax, 0);
}
return globalMax;
}
Last updated
Was this helpful?