LeetCode題解系列--121. Best Time to Buy and Sell Stock

描述

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.

思路

這題是股票系列最簡單的一題,其實就是找到兩個i, j,滿足 i < j 且 使得prices[j] - prices[i] 最大,如果不能賺錢,就不做交易,返回0。
可以說是一個DP的問題,不過比較簡單,其實就是簡單的迭代,一個變量維護day i之前的最小价格,不斷計算當前天賣出股票可以獲得最大的收益,在這些收益之中取得最大值即可。

解答

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        // for weird input
        if (prices.size() == 0) {
            return 0;
        }
        // min price to buy
        int minPrice = prices[0];
        // max profit to get
        int maxGain = 0;
        for (int i = 1; i < prices.size(); ++i) {
            maxGain = max(maxGain, prices[i] - minPrice);
            minPrice = min(minPrice, prices[i]);
        }
        return maxGain;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章