股票的最大收益的起點(diǎn) start和終點(diǎn)end掘殴;x盖矫,y等是中間點(diǎn)矾湃。
end - start = end - x + x - y +y +..... -end
把股票的點(diǎn)數(shù)組轉(zhuǎn)成連續(xù)點(diǎn)區(qū)間數(shù)組误窖,然后找區(qū)間數(shù)組的最大子數(shù)組碉京,起點(diǎn)和終點(diǎn)就是兩個(gè)邊界都分別加1猴伶。
package com.cammsia;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/** * Created by cammsia on 16/9/11. */
public class Test {
public static void main(String[] args) {
int a[] = { -47, 10, 23, 4, 3, 4, 3, 2, 46, 5, 5 };
int b[] = new int[a.length -1];
for (int i = 0; i < a.length-1; i++) {
b[i] = a[i+1] - a[i];
}
int maxSum = 0;
int curSum = 0;
int endIndex = 0;
int startIndex = 0;
for (int i = 0; i < b.length; i++) {
curSum += b[i];
//找終點(diǎn)
if (curSum > maxSum) {
endIndex = i + 2;
maxSum = curSum;
}
//找起點(diǎn)
if (curSum < 0) {
startIndex = i + 2;
curSum = 0;
}
}
System.out.println(startIndex + ":" + endIndex); System.out.println(maxSum);
}}