劍指Offer之股票的最大利潤

題目描述:

假設把某股票的價格按照時間先後順序存儲在數組中,請問買賣該股票一次可能獲得的最大利潤是多少?


題目分析:

第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;
 }

(完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章