题目描述

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

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

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

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

题解

这是 【买卖股票的最佳时机】 系列题目的第一题。

这道题目要求只能买卖一次股票。所以最佳策略一定是挑一个最低的价格买入,再挑一个最高的价格卖出。但是还有另一个限制条件,那就是你得先买,然后才能卖出去。

所以我们只需要枚举每个股票,把它当作卖出的那一只股票,然后只需要求出它之前价格最低的那一只股票就行了。价格最低的股票可以用一个变量来进行维护,然后枚举所有卖出的股票,减去它之前价格最低的那一只股票,然后和最优答案进行比较,最终就能得到最多能赚多少钱了。

最终答案就是:

时间复杂度是

代码

python

        class Solution:def maxProfit(self, prices: List[int]) -> int:n = len(prices)if n == 0: return 0minn, res = prices[0], 0for i in range(1, n):res = max(res, prices[i]-minn)minn = min(minn, prices[i])return res

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

  1. LeetCode #121 买卖股票的最佳时机 贪心 单调栈 动态规划

    LeetCode #121 买卖股票的最佳时机 题目描述 给定一个数组,它的第 iii 个元素是一支给定股票第 iii 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算 ...

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

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

  3. 【贪心算法】Leetcode 714. 买卖股票的最佳时机含手续费

    [贪心算法]Leetcode 714. 买卖股票的最佳时机含手续费 题目 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. ...

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

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

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

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

  6. 【算法】贪心算法:LeetCode 714 买卖股票的最佳时机含手续费 、LeetCode 968 监控二叉树

    LeetCode 714 买卖股票的最佳时机含手续费 (中等) 题目 描述 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. 你 ...

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

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

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

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

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

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

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

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

最新文章

  1. shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)
  2. Hibernate学习(二):heibernate核心接口
  3. AbstractListView源码分析6
  4. mysql转sqlserver_mysql转sqlserver工具
  5. 【原】基础篇:第一篇,本节主要向大家介绍Ext的最基础的话题
  6. MySql 创建存储过程
  7. el-table 树形表格 自定义展开图标_[shell脚本]表格数据在终端可视化输出
  8. ASP.NET工作笔记014---用VB.NET封装服务器端控件
  9. 基于Opencv3.0对图像进行透视变换
  10. Atitit.web ui  组件化 vs  mvc
  11. JavaScript开发规范要求
  12. Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)
  13. Centos6.5 一件安装FFmpeg 包括其中的坑
  14. 基于SOM算法的Iris数据分类
  15. Java深入理解深拷贝和浅拷贝区别
  16. 初生牛犊不怕虎!开发不足一年的Android实习生在大厂横冲直撞后,手握多份offer,特此分享!
  17. 第三十三篇 transition-group 列表过渡
  18. 4月日本旅游签证简化办理攻略分享
  19. 防疫主题的微信公众号图文排版有哪些技巧?
  20. 牛市来了,直接买币不就OK了,干嘛非要上矿机?

热门文章

  1. IP地址的定义和含义
  2. 树组件:主要配置项、属性、方法
  3. 在asp.net 中实现只允许数字输入的文本框
  4. Windows Workflow Foundation开发环境配置
  5. C++VS2019中新建自定义模板与删除自定义模板
  6. docker学习-运行第一个docker镜像hello world
  7. 队列的实现(二) 链式队列的实现
  8. 把Vim改装成一个IDE编程环境
  9. (OCR公式)Mathpix Snipping Tool
  10. VSCode 写python,打印中文输出乱码