每日算法系列【LeetCode 121】买卖股票的最佳时机

题目描述

给定一个数组,它的第 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源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索