leetcode 121. Best Time to Buy and Sell Stock ( Python )

1,009 阅读21分钟

描述

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.

解析

根据题意,只要找到所有数据中一个前面的最小值和一个后面的最大值,计算差值即可。时间复杂度为 O(N),空间复杂度为 O(1)。不要用暴力破解!

解答

class Solution(object):
	def maxProfit(prices):
	    """
	    :type prices: List[int]
	    :rtype: int
	    """
	    minPrice = float("inf")
	    maxProfit = float("-inf")
	    for i in prices:
	        if i<minPrice:
	            minPrice = i
	        else:
	            maxProfit = max(maxProfit, i-minPrice)
	    return maxProfit if maxProfit!=float("-inf") else 0
    
                   

运行结果

Runtime: 52 ms, faster than 51.17% of Python online submissions for Best Time to Buy and Sell Stock.
Memory Usage: 12.5 MB, less than 74.77% of Python online submissions for Best Time to Buy and Sell Stock.
	

每日格言:成功的诀窍在于永不改动既定的方针。

请作者骑一次共享单车 支付宝

支付宝

微信

微信