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

[LeetCode] 121. Best Time to Buy and Sell Stock 買賣股票的最佳時間

IT diff ger cti 利潤 變量 lee algorithm clas

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.

給一個某股票價格的數組,只允許一次買進股票和賣出股票,返回能獲得的最大利潤。

用一個變量min_price記錄目前價格曾出現過的最小價格,用另一個變量max_profit記錄到目前價格能獲得的最大利潤,遍歷數組,更新兩個變量的值,直到循環結束,返回max_profit。

Java:

public class Solution {
    public int maxProfit(int[] prices) {
        int res = 0, buy = Integer.MAX_VALUE;
        for (int price : prices) {
            buy = Math.min(buy, price);
            res = Math.max(res, price - buy);
        }
        return res;
    }
}  

Python:

class Solution:
    # @param prices, a list of integer
    # @return an integer
    def maxProfit(self, prices):
        max_profit, min_price = 0, float("inf")
        for price in prices:
            min_price = min(min_price, price)
            max_profit = max(max_profit, price - min_price)  
        return max_profit

C++:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int res = 0, buy = INT_MAX;
        for (int price : prices) {
            buy = min(buy, price);
            res = max(res, price - buy);
        }
        return res;
    }
};  

類似題目:

[LeetCode] 121. Best Time to Buy and Sell Stock 買賣股票的最佳時間