Leetcode C++《热题 Hot 100-6》121.买卖股票的最佳时机

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Leetcode C++《热题 Hot 100-6》121.买卖股票的最佳时机

  1. 题目

给定一个数组,它的第 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。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  1. 思路
  • 低价买进,高价卖出;如果价格一直是下降趋势,证明你怎么买都会赔钱,那么最大利润为0
  • 题目很巧妙,暴力法,计算出第i天卖掉的最大利润(第i天卖掉-前i-1天的最小值),求所有天卖掉的最大值
  • 如果最大值小于0,返回0,否则返回最大值
  • 涉及到找前i-1的最小值,用堆每次复杂度是logn,暴力查找是n
  • 时间复杂度分析O(nlogn)
  1. 代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //低价买进,高价卖出;如果价格一直是下降趋势,证明你怎么买都会赔钱,那么最大利润为0
        //题目很巧妙,暴力法,计算出第i天卖掉的最大利润(第i天卖掉-前i-1天的最小值),求所有天卖掉的最大值
        //如果最大值小于0,返回0,否则返回最大值
        //涉及到找前i-1的最小值,用堆每次复杂度是logn,暴力查找是n
        vector<int> minHeapPrices;
        if (prices.size() == 0)
            return 0;
        minHeapPrices.push_back(prices[0]);
        make_heap(minHeapPrices.begin(), minHeapPrices.end(), greater<int>());
        int maxProfitValue = 0;
        for (int i = 1; i < prices.size(); i++) {
                int min = minHeapPrices.front();
                int oneProfit = prices[i] - min;
                if (oneProfit > maxProfitValue) {
                    maxProfitValue = oneProfit;
                }
                minHeapPrices.push_back(prices[i]);
                push_heap(minHeapPrices.begin(), minHeapPrices.end(),greater<int>());
        }
        return maxProfitValue;
    }
};
股票收益问(leetcode121) 股票收益问Ⅰ 给定个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多允许完成一笔交易(即买入卖出一支股票),设计个算法来计算你所能获取的最大利润。 注意你不能在买入股票卖出股票。 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。... 阅读详情

相关推荐

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

1.买卖股票最佳时机 给定个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多允许完成一笔交易(即买入卖出一支股票),设计个算法来计算你所能获取的最大利润。 注意你不能在买入股票卖出股票。 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 =...

qq_41152046的博客 2783

编程练习6

买卖股票最佳时机 给定个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多允许完成一笔交易(即买入卖出一支股票次),设计个算法来计算你所能获取的最大利润。 注意:你不能在买入股票卖出股票。 Java解法: /* 次遍历 用个变量记录个历史最低价格 minprice,就可以假设股票是在那天买的。那么在第 i 天卖出股票能得到的利润就是 prices[i] - minprice。 因此,只需要遍历价格数组遍,记录历史最低点,然后比较 prices[

sky_zzk的博客 756

给定个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多允许完成一笔交易设计个算法来计算你所能获取的最大利润。将两个有序整数数组 nums1 nums2并到起成为有序数组

给定个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多允许完成一笔交易(即买入卖出一支股票),设计个算法来计算你所能获取的最大利润。 注意你不能在买入股票卖出股票。 示例 1: 输入 : [7, 1, 5, 3, 6, 4] 输出 : 5 解释 : 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 最大利润 = 6 - 1 = ...

be_gin_ner的博客 1万+

leetcode精选121.买卖股票最佳时机I(动态规划思想)

给定个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多允许完成一笔交易(即买入卖出一支股票),设计个算法来计算你所能获取的最大利润。 注意你不能在买入股票卖出股票。 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利...

honorwh的博客 396

LeetCode HOT 100 完整解笔记&知识点分类 C++代码实现

1、知识点分布 2、完整代码

小哈里的博客 1万+

Leetcode C++ Hot 100-66》309. 最佳买卖股票时机含冷冻期

Leetcode C++ Hot 100-66》309. 最佳买卖股票时机含冷冻期 目 思路 代码 class Solution { public: int maxProfit(vector<int>& prices) { // int n = prices.size(); if (n == 0) ...

快乐划水程序猿的专栏 258

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

本专栏主要通过“LeetCode 100”,来捡起自己本科阶段的算法知识与技巧。语言主要使用c++/java。第121买卖股票最佳时机,动态规划解法

weixin_45857030的博客 366

Hot 100总结【leetcode

leetcode hot100总结

weixin_44911248的博客 6598

LeetCode Hot100

链表的多数问可以通过双指针(快慢指针、前后指针)高效解决。

2301_82023822的博客 2520

LeetCode Hot 100 | 贪心(上)· 股票与跳跃游戏(C++ 解)

贪心算法在每步选择局部最优,以期达到全局最优。上篇涵盖股票买卖、跳跃游戏区间划分四道经典,重点理解为何局部贪心能保证全局最优。目难度核心技巧时间复杂度121买卖股票最佳时机🟢简单维护历史最低价,贪心取最大利润O(n)55跳跃游戏🟡中等从后向前,贪心更新目标位置O(n)45跳跃游戏 II🟡中等贪心维护当前/下跳边界O(n)763划分字母区间🟡中等预记录末位置,贪心切割O(n)

jcm0903的博客 405

力扣hot100买卖股票最佳时机

随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0。最大总利润为 4。

2302_77871725的博客 467

LeetCodeHOT100(简单),刷自用,python,c++

力扣hot100

qq_40283123的博客 2976

力扣Hot100单个人计划c++版(三)

力扣Hot100单个人计划c++版() 力扣Hot100单个人计划c++版(二) 刷链接:力扣Hot 100 每日,每日更,白板手写。 力扣Hot 10041.二叉树的层序遍历 41.二叉树的层序遍历 10.11打卡 层序遍历很基础的算法了,按照每层返回个vector的话,开始想到用两个队列循环取每层,然后在转成vector,当然解更巧妙的做法是记住每层的大小即可。 class Solution { public: vector<vector<int&

长门yuki 1100

leetcode hot 1006 贪心

语法/函数解释动态数组,可以自动扩容&prices传引用,避免复制整个数组,效率更高范围 for 循环,逐个访问 v 里的元素1e9科学计数法,等于 10 的 9 次方,也就是 1,000,000,000。

weixin_62889643的博客 426

leetcode hot 100】0920 对称二叉树,二叉树最大深度,买卖股票最佳时机,只出现次的数字,环形链表,相交链表

对称二叉树,二叉树最大深度,买卖股票最佳时机,只出现次的数字,环形链表,相交链表

是安澜啊 463

Hot 100计划】 LeetCode 121. 买卖股票最佳时机 | C++ 贪心/动态规划

本文介绍了LeetCode 121 买卖股票最佳时机 的解法。目要求在某天买入股票并在未来某天卖出,以获得最大利润。文章提出了O(N)时间复杂度的贪心算法/动态规划解法:通过次遍历记录历史最低价,并计算当前卖出能获得的利润,不断更新最大利润值。C++代码实现简洁明了,只需维护两个变量:历史最低价最大利润,遍历过程中不断更新这两个值即可得到最终结果。

qq_51233453的博客 356

力扣Hot100单个人计划c++版(四)

力扣Hot100单个人计划c++版() 力扣Hot100单个人计划c++版(二) 力扣Hot100单个人计划c++版(三) 力扣Hot100单个人计划c++版(四) 刷链接:力扣Hot 100 每日,每日更,白板手写。 力扣Hot 10061.课程表62.实现Trie(前缀树)63.数组中第k个最大元素64.最大正方形65.翻转二叉树66.回文链表67.二叉树的最近公共祖先68.除自身以外数组的乘积 61.课程表 11.3打卡 拓扑排序,还是待补吧。有点难写。 62.实现Trie(

长门yuki 1814

LeetCode 力扣 刷记录 HOT 100121,124,128,136,139)目+算法分析+Cpp解答

121.Best Time to Buy and Sell Stock 维持个最低价 + 个最优解: class Solution { public: int maxProfit(vector<int>& prices) { int len = prices.size(); int ans = 0, low = INT_MAX; ...

WULH 1379

LeetCode Hot 100:程序员高频面试库解析与刷指南

算法与数据结构是程序员面试的核心考察点,其中LeetCode Hot 100库因其高频考察特性成为技术面试准备的黄金标准。该库精选100道经典目,覆盖数组、链表、动态规划等关键算法范式,通过模式识别与刻意练习可显著提升解能力。在工程实践中,结合可视化工具(如visualgo.net)本地调试环境(如VSCode插件)能有效提升学习效率。针对动态规划等难点,理解状态转移方程边界条件处理是关键。掌握这些核心解技巧后,不仅能应对80%以上的技术面试,更能培养出系统化的算法思维,为后续进阶学习(如系

weixin_34290631的博客 453
上一篇: leetcode 热题 Hot 100-1. 两数之和
下一篇: Leetcode C++《热题 Hot 100-7》136.只出现一次的数字
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值