Leetcode121. 買賣股票的最佳時機

azulgrana02發表於2020-11-28

給定一個陣列,它的第 i 個元素是一支給定股票第 i 天的價格。

如果你最多隻允許完成一筆交易(即買入和賣出一支股票一次),設計一個演算法來計算你所能獲取的最大利潤。

注意:你不能在買入股票前賣出股票。
示例 1:
輸入: [7,1,5,3,6,4]
輸出: 5
解釋: 在第 2 天(股票價格 = 1)的時候買入,在第 5 天(股票價格 = 6)的時候賣出,最大利潤 = 6-1 = 5 。
注意利潤不能是 7-1 = 6, 因為賣出價格需要大於買入價格;同時,你不能在買入前賣出股票。

思路:
很直觀的看例項1,1該陣列中是最小价格,那麼最大利潤就是1後面中最大的數字減去1.定義兩個變數,第一個是maxprofit(最大利潤),很明顯最大利潤就是價格減去最低價格即maxprofit=max(maxprofit,price-minprice),第二個是最低價格minprice,最低價格就是陣列中的最小元素。minprice=min(minprice,price)。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int minprice = 1e9, maxprofit = 0;//1e9的作用是給變數賦一個初始極大值,原因在於後面的程式碼中需要取此變數和其他變數的最小值。
        for(auto price:prices){
            maxprofit=max(maxprofit,price-minprice);
            minprice=min(minprice,price);
        }
        return maxprofit;
    }
};

相關文章