买卖股票的最佳时机

题目链接

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0

示例 1:

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

示例 2:

输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。

提示:

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 104

这是一道经典的股票买卖问题,可以使用动态规划和贪心两种方式来解决。下面是两种方式的详细题解,使用Python。

动态规划

我们可以用一个一维数组dp来记录每天卖出股票所能获得的最大利润。其中dp[i]表示第i天卖出股票所能获得的最大利润。我们可以用一个变量min_price来记录前i-1天中股票的最低价格,然后用prices[i]减去min_price就是第i天卖出股票所能获得的最大利润。因此,我们可以得到状态转移方程:

dp[i]=max(dp[i−1],prices[i]−min_price)

其中,min_price表示前i−1天中股票的最低价格。

代码如下:

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

贪心

我们可以用一个变量min_price来记录前i-1天中股票的最低价格,然后用prices[i]减去min_price就是第i天卖出股票所能获得的最大利润。因此,我们可以得到状态转移方程:

profit=max(profit,prices[i]−min_price)

其中,min_price表示前i−1天中股票的最低价格。

代码如下:

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

每日一题之买卖股票的最佳时机相关推荐

  1. 【每日一算法】买卖股票的最佳时机

    微信改版,加星标不迷路! 每日一算法-买卖股票的最佳时机 作者:阿广 阅读目录 1 题目 2 解析 1 题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔 ...

  2. LeetCode刷题记录——买卖股票的最佳时机

    目录 1. 买卖股票的最佳时机 2. 买卖股票的最佳时机II 相信许多小伙伴在笔试和面试的时候会经常遇到 买卖股票的最佳时机的相关题目,看了这篇文章,你将会一次性掌握该系列题目的解法. 废话不多说,且 ...

  3. 力扣leetcode之Java刷题121买卖股票的最佳时机

    121. 买卖股票的最佳时机 题目:   给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格.   你只能选择某一天买入这只股票,并选择在未来的某一 ...

  4. 力扣122题:买卖股票的最佳时机 II

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). **注意:**你不能同时参与多笔交易(你必须 ...

  5. [剑指offer]面试题第[63]题[Leetcode][第121题][JAVA][买卖股票的最佳时机][动态规划][暴力]

    [问题描述][简单] [解答思路] 1. 暴力 时间复杂度:O(N^2) 空间复杂度:O(1) public class Solution {public int maxProfit(int pric ...

  6. 【LeetCode每日一题】——714.买卖股票的最佳时机含手续费

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[解题思路] 七[题目提示] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 贪心算法 二[ ...

  7. 《LeetCode力扣练习》第121题 买卖股票的最佳时机 Java

    <LeetCode力扣练习>第121题 买卖股票的最佳时机 Java 一.资源 题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价 ...

  8. 《LeetCode刷题》—121. 买卖股票的最佳时机

    <LeetCode刷题>-121. 买卖股票的最佳时机 一.题目内容 原题连接:https://leetcode.cn/problems/best-time-to-buy-and-sell ...

  9. 买卖股票的最佳时机——力扣121题

    买卖股票的最佳时机--力扣121题 暴力解法 从前往后,不断将元素之间进行两两比较(类似冒泡排序中),然后不断更新出maxProfit的值.例如数组[7,1,5,3,6,4]中,从7开始,则7 -&g ...

最新文章

  1. 在ASP.NET中使用Office Web Components (OWC)创建统计图
  2. 【PHP7源码分析】PHP7到底有多快,基准测试与特性分析告诉你
  3. tab 页形式展现多张报表
  4. 区块链系统之《一种基于区块链的云数据共享方法》
  5. loss=nan解决办法
  6. Revit API创建标高,单位转换
  7. 【免费软件测试视频-0031】——QTP系列之---功能测试自动化概要介绍
  8. 职业技术人士学习捷径最快的网站
  9. linux无缝升级的版本,最近一周发布新版本的Linux发行版 - 2020-01-03
  10. 漫画:IT大牛养成记?
  11. 前一天还在聊抢票,第二天就被裁了,年底是互联网行业的寒冬吗?
  12. 如何用 Python 写 Excel 中 Vlookup 函数?
  13. jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable
  14. HDU-1087 Super Jumping! Jumping! Jumping!
  15. 怎样解决VirtrualBox不能新建64bit的系统的问题
  16. 数据科学包15-matplotlib详细介绍
  17. 拓端tecdat|R语言用多项式回归和ARIMA模型预测电力负荷时间序列数据
  18. PPT转视频——小内存
  19. 【迁移学习】Self Paced Adversarial Training for Multimodal Few-shot Learning论文解读
  20. Java中怎么打开jsp_jsp文件怎么打开 打开jsp文件的详细步骤【详细介绍】

热门文章

  1. 【20保研】兰州大学信息科学与工程学院2019年优秀大学生暑期夏令营活动通知...
  2. BLC100型无线继电器
  3. 【iPhone12充电接触不良充不上电的终极解决--90%有效】
  4. 2021蓝桥杯B组C/C++解析
  5. 浅谈IM软件客户端的断线重连、心跳和长在线
  6. Java原子操作和CAS
  7. 用Java实现周易算卦
  8. 高斯数据库gaussDB(DWS),全网首篇对标MySQL命令集合文章
  9. Win10系统基于WSL2安装Docker问题小结
  10. 防统方Oracle,风信子医院数据库安全与防统方解决方案