1. 程式人生 > >[LeetCode]121. Best Time to Buy and Sell Stock(股票買賣的最佳時間)

[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 (i.e., buy one and sell one share of the stock), design an algorithm to find the maximum profit.

Note that you cannot sell a stock before you buy one.

Example 1:

Input: [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 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
Explanation: In this case, no transaction is done, i.e. max profit = 0.

題意解讀:給定一個數組,陣列的第i個元素是第i天的股票價格。如果你只允許進行一次買賣操作(買和買當做一次交易),設計一個演算法尋找最大額收益
思路:

  • 1、用一個變數來記錄遍歷過的陣列中的最小值,然後計算當前值和最小值的差值,然後每次選擇最大利潤來更新。當遍歷陣列之後,當前利潤即為所求利潤。
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int res=0,buy=INT_MAX;
        for(auto price :prices)
        {
            buy=min(price,buy);
                res=max(res,price-buy);
        }
        return res;
    }
};