卖萌的弱渣

I am stupid, I am hungry.

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.

Solution

  • cur_min: 维护当前股价最低价
  • dp: 每天卖出时最大利润,并更新cur_min
(Best-Time-to-Buy-and-Sell-Stock.py) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        if len(prices) == 0:
            return 0

        n = len(prices)

        # 每一天卖出能赚到的最大钱
        dp = [0]*n
        # 当前为止股价最低值
        cur_min = prices[0]

        for p in range(len(prices)):
            if prices[p] <= cur_min:
                dp[p] = 0
                cur_min = prices[p]
            else:
                dp[p] = prices[p] - cur_min
        return max(dp)