每日一题之买卖股票的最佳时机
买卖股票的最佳时机
题目链接
给定一个数组 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 题目 2 解析 1 题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔 ...
- LeetCode刷题记录——买卖股票的最佳时机
目录 1. 买卖股票的最佳时机 2. 买卖股票的最佳时机II 相信许多小伙伴在笔试和面试的时候会经常遇到 买卖股票的最佳时机的相关题目,看了这篇文章,你将会一次性掌握该系列题目的解法. 废话不多说,且 ...
- 力扣leetcode之Java刷题121买卖股票的最佳时机
121. 买卖股票的最佳时机 题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择某一天买入这只股票,并选择在未来的某一 ...
- 力扣122题:买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). **注意:**你不能同时参与多笔交易(你必须 ...
- [剑指offer]面试题第[63]题[Leetcode][第121题][JAVA][买卖股票的最佳时机][动态规划][暴力]
[问题描述][简单] [解答思路] 1. 暴力 时间复杂度:O(N^2) 空间复杂度:O(1) public class Solution {public int maxProfit(int pric ...
- 【LeetCode每日一题】——714.买卖股票的最佳时机含手续费
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[解题思路] 七[题目提示] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 贪心算法 二[ ...
- 《LeetCode力扣练习》第121题 买卖股票的最佳时机 Java
<LeetCode力扣练习>第121题 买卖股票的最佳时机 Java 一.资源 题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价 ...
- 《LeetCode刷题》—121. 买卖股票的最佳时机
<LeetCode刷题>-121. 买卖股票的最佳时机 一.题目内容 原题连接:https://leetcode.cn/problems/best-time-to-buy-and-sell ...
- 买卖股票的最佳时机——力扣121题
买卖股票的最佳时机--力扣121题 暴力解法 从前往后,不断将元素之间进行两两比较(类似冒泡排序中),然后不断更新出maxProfit的值.例如数组[7,1,5,3,6,4]中,从7开始,则7 -&g ...
最新文章
- 在ASP.NET中使用Office Web Components (OWC)创建统计图
- 【PHP7源码分析】PHP7到底有多快,基准测试与特性分析告诉你
- tab 页形式展现多张报表
- 区块链系统之《一种基于区块链的云数据共享方法》
- loss=nan解决办法
- Revit API创建标高,单位转换
- 【免费软件测试视频-0031】——QTP系列之---功能测试自动化概要介绍
- 职业技术人士学习捷径最快的网站
- linux无缝升级的版本,最近一周发布新版本的Linux发行版 - 2020-01-03
- 漫画:IT大牛养成记?
- 前一天还在聊抢票,第二天就被裁了,年底是互联网行业的寒冬吗?
- 如何用 Python 写 Excel 中 Vlookup 函数?
- jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable
- HDU-1087 Super Jumping! Jumping! Jumping!
- 怎样解决VirtrualBox不能新建64bit的系统的问题
- 数据科学包15-matplotlib详细介绍
- 拓端tecdat|R语言用多项式回归和ARIMA模型预测电力负荷时间序列数据
- PPT转视频——小内存
- 【迁移学习】Self Paced Adversarial Training for Multimodal Few-shot Learning论文解读
- Java中怎么打开jsp_jsp文件怎么打开 打开jsp文件的详细步骤【详细介绍】