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

来源:互联网 发布:淘宝审核原图的标准 编辑:程序博客网 时间:2024/06/10 09:00

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.

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.

分析

In formal terms, we need to find max(prices[j]prices[i]), for every i and j such that j > i.
接下来再进一步抽象这个问题:对每一个元素都减去它之前最小的元素,这样得到的最大值就是要求的结果,max(price[j]min(price[:j])),因此我们只要用minprice保存min(price[:j])并不断更新即可。

class Solution(object):    def maxProfit(self, prices):        """        :type prices: List[int]        :rtype: int        """        minprice =  float('inf')        ans = 0        for i in prices:            if i < minprice:                minprice = i            else:                ans = max(ans, i-minprice)        return ans
原创粉丝点击