在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。
给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。
测试样例:
[10,22,5,75,65,80],6
返回:87
import java.util.Scanner;
public class stock {
/**
* @param args
*/
public static int maxprofit(int[] prices, int n){
int firstBuy=Integer.MIN_VALUE;
int firstSell=Integer.MIN_VALUE;
int secondBuy=Integer.MIN_VALUE;
int secondSell=Integer.MIN_VALUE;
int profit=Integer.MIN_VALUE;
for(int i=0;i<n;i++){
firstBuy=Math.max(firstBuy, -prices[i]);
firstSell=Math.max(firstSell, prices[i]+firstBuy);
secondBuy=Math.max(secondBuy, firstSell-prices[i]);
profit=Math.max(profit, prices[i]+secondBuy);
}
return profit;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
String n=in.nextLine();
String a[]=n.split(",");
int len=a.length;
int[] prices=new int[len];
for(int i=0;i<len;i++){
prices[i]=Integer.parseInt(a[i]);
// System.out.print(prices[i]);
}
// System.out.print("sfd");
System.out.println(maxprofit(prices,len));
}
}