題目描述:
假設把某股票的價格按照時間先後順序存儲在數組中,請問買賣該股票一次可能獲得的最大利潤是多少?
題目分析:
第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;
}
(完)