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
.
More practice:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
取整数的最小值可以用:
int max = Integer.MIN_VALUE
int max=0x80000001
方法一:
二次遍历法,时间复杂度n方。
public class Solution {
public int maxSubArray(int[] nums) {
int sum=0;
int max=0x80000001;
if(nums.length==1) return nums[0];
for(int i=0;i<nums.length;i++){
sum=0;
for(int j=i;j<nums.length;j++){
sum=sum+nums[j];
if(sum>max) max=sum;
}
}
return max;
}
}
方法二:维护一个sum数组,遍历到某个数A[i]时,考虑sum[i -1] + A[I]后是更大还是更小,如果更大则加,如果更小,就使sum[i] = 此数。然后用max记录sum数组中最大的那个数即可。
public class Solution {
public int maxSubArray(int[] A) {
int len = A.length;
int max = A[0];
int[] sum = new int[len]; //***
sum[0] = A[0];
for(int i = 1; i < len; i++){
sum[i] = Math.max(sum[i - 1] + A[i], A[i]); //***
max = Math.max(max, sum[i]);
}
return max;
}
}