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

xiaoxiao2021-02-28  134

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
转载请注明原文地址: https://www.6miu.com/read-44590.html

最新回复(0)