题解 | #买卖股票的最好时机(三)#
买卖股票的最好时机(三)
http://www.nowcoder.com/practice/2fea2b0349df4f7689f6f5a882e4f129
import java.util.*;
public class Main {
public static void main (String[] args) {
// 1. 状态
// 买入状态,卖出状态
// 2. 选择
// 买入,卖出,不动
// 只能操作两笔
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int price = sc.nextInt();
// 3. dp定义
// buy1 代表第1次买入的股票收益
// sell1代表第1次卖出的股票收益
// buy2 代表第2次买入的股票收益
// sell2代表第2次卖出的股票收益
// 4. 基本状态
// buy1=-price, sell1=0
// buy2=-price, sell2=0
int buy1 = -price, sell1 = 0;
int buy2 = -price, sell2 = 0;
for (int i = 1; i < n; i++) {
price = sc.nextInt();
// 5. 转移方程
buy1 = Math.max(buy1, - price);
sell1 = Math.max(sell1, buy1 + price);
buy2 = Math.max(buy2, sell1 - price);
sell2 = Math.max(sell2, buy2 + price);
}
System.out.println(sell2);
}
}