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.
For this problem, return the maximum sum.
在给定的数组中,返回连续子数组中最大和。
2.思路
最简单方式:直接2层循环便利数组,得到时间复杂度为O(n^2)的算法。但这种蛮力求解方法差强人意。
public class Solution {
// DO NOT MODFIY THE LIST.
public int maxSubArray(final List<Integer> a) {
int result = a.get(0);
for(int i=0; i<a.size(); i++){
int current = 0;
for(int j=i; j<a.size();j++){
current += a.get(j);
if(current>result)
result = current;
}
}
return result;
}
}
考虑到,最大和连续子数组必然会以非负值开始,所以可以用下面方式解决。
3.代码
public class Solution {
// DO NOT MODFIY THE LIST.
public int maxSubArray(final List<Integer> a) {
int result = Integer.MIN_VALUE;
int value = 0;
for(int i=0; i<a.size(); i++){
value += a.get(i);
result = Math.max(value, result);
if(value < 0)
value = 0;
}
return result;
}
}