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.
第一次 submit
# --- TLE ---
class Solution(object):
def maxProfit(self, prices):
current_profit = 0
for i in range(len(prices)):
tmp = 0
for j in prices[i+1:]:
tmp = j - prices[i]
if tmp > 0:
current_profit = max(current_profit, tmp)
return current_profit
第二次 submit
class Solution(object):
def maxProfit(self, prices):
max_profit, min_price = 0, float('inf')
for price in prices:
# 使用 min_price 保存当前 price 之前的最小的价格
min_price = min(min_price, price)
profit = price - min_price
max_profit = max(max_profit, profit)
return max_profit