Maximum Subarray
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.
click to show more practice.
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.
思路
- men:当遇到新的数时,是整体大(men+新的数),还是这个数单起一组大,men等于较大的那个
- max:记录最大的men
代码
class Solution {
public int maxSubArray(int[] nums) {
int max = nums[0];
int men = max;
for(int i=1;i<nums.length;i++){
//这里使用Math.max(a,b)会更快
//men = Math.max(men+nums[i],nums[i])
men = return_max(men+nums[i],nums[i]);
max = return_max(men,max);
}
return max;
}
public int return_max(int a, int b){
if(a > b) return a;
return b;
}
}