题目描述:
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
题目分析:
第1天的最大利润为:0;
第2天的最大利润为:max(前2天前的最大利润,第2天的价值 - 第2天前的最小价值);
第3天的最大利润为:max(第3天前的最大利润,第3天的价值 - 第3天前的最小价值);
第4天的最大利润为:max(第4天前的最大利润,第4天的价值 - 第4天前的最小价值);
…
第i天的最大利润为:max(第i天前的最大利润,第i天的价值 - 第i天前的最小价值)
条件转移方程为:
dp[i] = max(dp[i - 1], prices[i] - min);
其中min代表前i-1天中,股票价格最小的那一天的价格。
参考代码:
public int maxProfit(int[] prices) {
if(prices == null || prices.length == 0)return 0;
int min = prices[0];//初始值为第一天的价格
int max = 0;//初始值为0,表示第1天时,收益为0
for(int i = 0; i < prices.length; i++){
max = Math.max(max, prices[i] - min);
min = Math.min(min, prices[i]);
}
return max;
}
(完)