题目描述
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。node
若是你最多只容许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。python
注意你不能在买入股票前卖出股票。web
示例1算法
输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 由于卖出价格须要大于买入价格。
示例2数组
输入:[7,6,4,3,1]输出:0解释:在这种状况下, 没有交易完成, 因此最大利润为 0。
题解
这是 【买卖股票的最佳时机】 系列题目的第一题。微信
这道题目要求只能买卖一次股票。因此最佳策略必定是挑一个最低的价格买入,再挑一个最高的价格卖出。可是还有另外一个限制条件,那就是你得先买,而后才能卖出去。编辑器
因此咱们只须要枚举每一个股票,把它看成卖出的那一只股票,而后只须要求出它以前价格最低的那一只股票就好了。价格最低的股票能够用一个变量来进行维护,而后枚举全部卖出的股票,减去它以前价格最低的那一只股票,而后和最优答案进行比较,最终就能获得最多能赚多少钱了。svg
最终答案就是:学习
时间复杂度是 。flex
代码
python
class Solution: def maxProfit(self, prices: List[int]) -> int: n = len(prices) if n == 0: return 0 minn, res = prices[0], 0 for i in range(1, n): res = max(res, prices[i]-minn) minn = min(minn, prices[i]) return res
做者简介:godweiyang,知乎同名,华东师范大学计算机系硕士在读,方向天然语言处理与深度学习。喜欢与人分享技术与知识,期待与你的进一步交流~
个人微信:weiyang792321264。有任何问题均可以在评论区留言,也欢迎加我微信深刻沟通~
本文分享自微信公众号 - 算法码上来(GodNLP)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。