一、暴力求解法
//对每一个可能的组合求和,然后比较最大的和.
public static int FindGreatestSumOfSubArray(int[] array) {
ArrayList<Integer> result = new ArrayList();
for (int i = 0; i < array.length; i++) {
for (int j = array.length - 1; j >= i; j--) {
result.add(getsum(array, i, j));
}
}
Collections.sort(result);
return result.get(result.size()-1);
}
public static int getsum(int[] s, int i, int j) {
int sum = 0;
for (int k = i; k <= j; k++) {
sum += s[k];
}
return sum;
}
二、扫描法
public int maxSum(int[] array){
int sum = Integer.MIN_VALUE;
int current = 0;
for (int i = 0; i < array.length; i++) {
if(array[i]<0){
current = array[i];
}else {
current+=array[i];
}
if(sum<current){
sum = current;
}
}
return sum;
}
这个问题的常见场景计算股票最大的收益