LeetCode #121: Best Time to Buy and Sell Stock

Problem

Say you have an array for which the ith element is the price of a given stock on day i.
If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.

Example 1:
Input: [7, 1, 5, 3, 6, 4]
Output: 5

max. difference = 6-1 = 5 
(not 7-1 = 6, as selling price needs to be larger than buying price)
Example 2:
Input: [7, 6, 4, 3, 1]
Output: 0

In this case, no transaction is done, i.e. max profit = 0.

題意

懷疑智商題之二:又是買股票和賣股票的問題。題目給定一個數組prices,prices[i]代表第i天股票的價格。要求找出最大利潤。
限制條件是,在這n天中只能完成一次買入和賣出操作。(Best Time to Buy an Sell Stock II中,可無限次買入和賣出)。

分析

初始化minPrice = 0, maxPro = 0
從第0天開始,通過for循環遍歷數組,在訪問prices[i]時,做兩次比較:

  • 第一次比較prices[i]和當前minPrice的值
  • 第二次比較prices[i] - minPrice和當前maxPro

這道題中要說明其DP思想是一件讓人很為難的事情···簡單來說,這道題是從第一天開始,逐步擴大問題規模,記錄出現過的最低價格,每一天的價格都記錄一個利潤值,比較該利潤值與到目前為止的最大利潤值,更新最大利潤值,直到問題規模增長到n為止。

Code

//Runtime: 6ms
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if (prices.empty()) return 0;
        int minPrice = prices[0];
        int maxPro = 0;
        for (int i = 0; i < prices.size(); i++){
            minPrice = min(minPrice, prices[i]);
            maxPro = max(maxPro, prices[i] - minPrice);
        }

        return maxPro;
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容