股票的最大收益的起點 start和終點end;x,y等是中間點。
end - start = end - x + x - y +y +..... -end
把股票的點數組轉成連續(xù)點區(qū)間數組,然后找區(qū)間數組的最大子數組,起點和終點就是兩個邊界都分別加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];
//找終點
if (curSum > maxSum) {
endIndex = i + 2;
maxSum = curSum;
}
//找起點
if (curSum < 0) {
startIndex = i + 2;
curSum = 0;
}
}
System.out.println(startIndex + ":" + endIndex); System.out.println(maxSum);
}}