LeetCode #121 买卖股票的最佳时机

题目描述

给定一个数组,它的第 iii 个元素是一支给定股票第 iii 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。

注意:你不能在买入股票前卖出股票。

示例 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。

方法一:贪心

我觉得这也有点像滑动窗口的思想,就是维护一个前面的利润最大值,再维护一个最小的购入点。

维护最大值的作用是防止后面最小购入点虽然变小了但是利润缺没那么大:比如说 [ 3, 5, 1, 2 ],第一天购入第二天售出的利润是 2,然后第三天把最小购入点调成了 1,但是只有第四天的 2 可以卖,这样利润就是 2 - 1 = 1,显然没有前面的利润高

class Solution:def maxProfit(self, prices: List[int]) -> int:if not prices: return 0# 最小购入点mmin = prices[0]# 最大利润,初始化为1防止股票一直跌mmax = 0for i in range(1, len(prices)):if prices[i] < mmin:mmin = prices[i]else:mmax = max(mmax, prices[i] - mmin)return mmax
  • 时间复杂度:O(N)O(N)O(N)
  • 空间复杂度:O(1)O(1)O(1)

方法二:单调栈

具体可以看 @文慕阳:C++ 利用哨兵

LeetCode #121 买卖股票的最佳时机 贪心 单调栈 动态规划相关推荐

  1. 158. Leetcode 121. 买卖股票的最佳时机 (贪心算法-股票题目)

    class Solution:def maxProfit(self, prices: List[int]) -> int:low, max_profit = float("inf&qu ...

  2. leetcode - 121.买卖股票的最佳时机

    121.买卖股票的最佳时机 ------------------------------------------ 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成 ...

  3. leetcode.121. 买卖股票的最佳时机(best-time-to-buy-and-sell-stock)

    文章目录 121. 买卖股票的最佳时机 代码与思路 暴力法 一次遍历 单调栈 122. 买卖股票的最佳时机 II 代码与思路 股票问题系列通解 121. 买卖股票的最佳时机 给定一个数组,它的第 i ...

  4. LeetCode - 121. 买卖股票的最佳时机

    121. 买卖股票的最佳时机 class Solution {public int maxProfit(int[] prices) {if (prices == null || prices.leng ...

  5. LeetCode 121:买卖股票的最佳时机 思考分析

    题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润. 注意:你不能在买入股票 ...

  6. leetcode 121. 买卖股票的最佳时机 (贪心 + 动规 + 双指针

    贪心的思路: 得到最小值,再挨个用数组中的值减去最小值,最终值取一个最大的 class Solution { public:int maxProfit(vector<int>& p ...

  7. 105. Leetcode 121. 买卖股票的最佳时机 (动态规划-股票交易)

    给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票.设计一个算法来 ...

  8. LeetCode: 121. 买卖股票的最佳时机(C++)

    题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票 ...

  9. LeetCode 121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock)

    简单粗暴的第一种解法: class Solution { public:int maxProfit(vector<int>& prices) {int m = prices.siz ...

最新文章

  1. Niagara 泵阀
  2. 各种操作系统ping时的TTL值
  3. 十二天深入理解计算机系统(一)
  4. 在TCP/IP模型中,( )处理关于可靠性、流量控制和错误校正等问题。
  5. Python flask 特殊装饰器 @app.before_request 和 @app.after_request 以及@app.errorhandler介绍
  6. HDU - 1525
  7. 采用随机的'User-Agent'提高博客的访问量
  8. delphi FastReport 安装方法
  9. spring面向接口编程
  10. win11怎么去除快速搜索 Windows11去除快速搜索的步骤方法
  11. python编程入门经典-总算理解python编程入门经典教程
  12. Linux下安装AliSQL(MySQL)及相关环境配置
  13. 用质谱法定义 HLA-II 配体处理和结合规则可增强癌症表位预测
  14. html将数据永久保存起来,数据保存(永久保存)方式(示例代码)
  15. MMyolo报错:undefined symbol: _ZN3c105ErrorC2ENS_14SourceLocationESs 的解决方案
  16. 介绍解决方案、项目和项
  17. Andrew Ng 机器学习鸡尾酒音频分离算法解析
  18. Confluence创建自动填充序列表格
  19. BarTender 打印机的控制详解
  20. GPU CUDA Python笔记

热门文章

  1. 卫生事业单位计算机科学与技术,卫生事业单位考试计算机科学与技术学习知识点.docx...
  2. chrome 油猴 电脑或者手机click()失效,解决
  3. Hackthebox(1)系列持续更新
  4. MAC--终端Terminal 快捷键
  5. BadBoy乱码处理
  6. python写文件字母_Python - 文件读写
  7. 今日头条下拉框推广,出效果付费
  8. HDU2121:Ice_cream’s world II (虚根+有向图最小生成树)
  9. 怎么把html格式转换成数字,Excel文本格式怎么转化成数字格式 excel文本转化数字格式教程...
  10. Qt Mainwindow添加/删除标题栏