Problem
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.
Solution:
最简单的O(N)方法就是从左往右扫,track min value, 如果能够更新min value就更新,如果不行,即股价触底反弹,则计算当前值与min value 的差,比较这个差与global 的dif就行。
或者是从右往左扫,track max value.
ref: http://www.geeksforgeeks.org/maximum-difference-between-two-elements/
class Solution(object):
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
if len(prices) < 2:
return 0
min_cur = prices[0]
max_dif = prices[1] - prices[0]
for i in xrange(len(prices)):
if prices[i] < min_cur:
min_cur = prices[i]
else:
dif = prices[i] - min_cur
if dif > max_dif:
max_dif = dif
return max_dif