Leetcode 121:买卖股票的最佳时机

力扣(LeetCode) 121: 买卖股票的最佳时机 - 解法思路 给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。要点是只需要跟踪到目前为止看到的最低价格。在每一天,检查今天卖出(在最低价格买入后)是否给出比之前更好的利润。优化的一次遍历方法在 O(n) 时间内以 O(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。

我的解法:两层迭代器循环的暴力法运行超时

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.empty()) return 0;

        int max_profit = 0;
        
        for(vector<int>::iterator iter = prices.begin(); iter != prices.end() - 1; iter++)
        {
            for(vector<int>::iterator iter1 = iter+1; iter1 != prices.end(); iter1++)
            {
                int profit = *iter1 - *iter;
                if(profit > max_profit) max_profit = profit;
            }
        }
        
        return max_profit;
    }
};

正确解法:一次遍历,记录每次循环的最小值

只执行一次循环,在每一次循环都拿当前值和之前得到的最小值比较,如果当前值小于最小值,则当前值成为新的最小值,若当前值大于最小值,则进行相减计算利润,便利每一次循环,找出利润最高的。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.empty()) return 0;

        int min_price = prices[0];
        int max_profit = 0;

        for(int i = 1; i < prices.size(); i++)
        {
            if(prices[i] > min_price)
            {
                int profit = prices[i] - min_price;
                if(profit > max_profit) max_profit = profit;
            }
            else
            {
                min_price = prices[i];
            }
        }

        return max_profit;
    }
};
力扣题解系列:121. 买卖股票的最佳时机 题目:121. 买卖股票的最佳时机 题目描述: 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。 提示: 1.0 <= 数组长度 <= 10^5 来源:力扣(LeetCode) 链接:h 阅读详情

相关推荐

【简单】力扣算法题解析LeetCode121:买卖股票的最佳时机

题目要求在股票价格数组中找到最佳买入和卖出时机,使利润最大化(卖出需在买入后)。通过一次遍历动态更新最低价格和最大利润:初始化minPrice为极大值,maxProfit为0;遍历时若当前价格更低则更新minPrice,否则计算利润并更新maxProfit。时间复杂度O(n),空间复杂度O(1)。例如,输入[7,1,5,3,6,4]输出5(第2天买入,第5天卖出)。代码简洁高效,适用于大规模数据。

ylumwd的博客 552

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

leetcode-121:买卖股票的最佳时机题目解题方法一:贪心方法二:动态规划方法三:单调栈 题目 题目连接 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 示例 1: 输入:[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 = 1)的

菊头蝙蝠的博客 519

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

每天都有两种状态,当天买了还是卖了,因此考虑使用两个变量进行标识,

uncle_ll的博客 387

代码随想录算法训练营第40天| 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III

注意和121不同的地方 是[i][0]的递推公式 因为可以多次购入 所以此时若i天买入 则要用i-1天不持有的金额减去该股票的价格。注意这边最大买卖次数为2,因此设置4个状态分别表示第一次买入,第一次卖出,第二次买入,第二次卖出。思路非常难想 要注意j分别代表持有股票的情况下的最多金额和不持有股票的情况下的最多金额。由于这是第一次买入股票,你之前没有任何股票,所以你的初始状态是零利润。题目链接:​​​​​​​​​​​​​​​​​​​​​。因此,今天买入股票后的利润为。题目链接:​​​​​​​。

2301_76253115的博客 241

AIDC供电系统与算电协同

AIDC供电系统的技术革新为算电协同提供了基础保障,而算电协同则是解决AIDC高能耗问题、推动数字经济可持续发展的关键路径

数据中心全生命周期价值管理 2570

冷源法测试噪声系数(Noise Figure)详细步骤

背景知识 电阻负载的功率谱密度 噪声等效模型 3 4 冷源法测试步骤 注意事项

eleday的电子世界 6871

【力扣 Hot100】LeetCode 121. 买卖股票的最佳时机:贪心就是一直记住最低价

这道LeetCode121题是经典的股票买卖问题,要求计算在只允许一次交易(先买后卖)时的最大利润。关键在于贪心算法的应用:遍历价格数组时,维护历史最低价minPrice和当前最大利润maxProfit。对于每一天的价格,若低于minPrice则更新minPrice,否则计算当前卖出利润(当前价-minPrice)并更新maxProfit。该方法将O(n^2)的暴力解法优化为O(n)时间复杂度,空间复杂度O(1)。核心思想是:对于每个可能的卖出日,最佳买入日一定是之前的历史最低价日。

lg3407888182的博客 203

SAP S/4HANA 物料分类账(ML)/实际成本核算(Actual Costing)——底表全景 & CKMLCP 执行后数据变化

插入 ML 重估凭证行项目:Dr/Cr 库存科目(期末库存调整)、Dr/Cr COGS/消耗科目(消耗重估)、Cr/Dr ML 重估抵消科目(PRY/PRV 类逻辑)also STPRS/VERPR/PEINH/LBKUM 等(但 S/4 很多“真理”在 ACDOCA)MLPP / MLPPF / MLCR / MLCRF / MLCD / CKMLMV003/004 等。Material Ledger Document(行项目明细:收货/发票价差/结算写入/重估相关)间接(PUP在CKMLCR;

weixin_52203666的博客 583

Leetcode121(力扣121):买卖股票的最佳时机

class Solution { public: int maxProfit(vector<int>& prices) { if(prices.size()<2) return 0; int mini=prices[0]; int max_pro=0; for(int i=1;i<prices.size();i++) { mini=min(mini,prices[i]); .

weixin_44537258的博客 181

DEA各种模型原理及stata代码实现

DEA各种模型原理及stata代码实现DEA各种模型原理及stata代码实现一、CCR和BCC1.原理2.效率测算stata代码3.Malmquist指数3.1M指数3.2Global-Malmquist指数4.指数计算代码与案例二、SBM模型1.原理2.stata代码实现三、方向性距离函数(DDF)1.原理2.stata代码实现3.非径向DDF模型(NDDF)3.GML指数4.指数测算四、总结 DEA各种模型原理及stata代码实现 一、CCR和BCC 1.原理 CCR模型产出导向下的效率通过求解以下规划

wonder1322的博客 4万+

从零开始:用Xilinx FPGA实现RISC-V单周期CPU(附完整Verilog代码)

本文详细介绍了如何使用Xilinx FPGA从零开始实现RISC-V单周期CPU,包括开发环境搭建、核心架构设计、Verilog代码实现及功能验证。通过实战指南和完整代码示例,帮助开发者掌握RISC-V CPU设计的关键技术,适用于嵌入式系统和定制化计算场景。

weixin_30664051的博客 547

每日算法练习:LeetCode 121. 买卖股票的最佳时机 ✅

这道题的最优解法是贪心算法,核心思想是在遍历中维护最小买入价和最大利润;O(n)的时间复杂度是处理数组类问题的理想目标,能通过所有测试用例;对比示例 1 和示例 2,算法能正确处理 “无法获利” 的情况,直接返回 0。今天的每日算法练习就到这里,我们明天再见!👋。

wfbcg的博客 221

国产系统迁移实战:在银河麒麟V10上搞定Wine32位支持,让老Windows软件跑起来

本文详细介绍了在银河麒麟V10操作系统上构建Wine32位支持的全过程,帮助用户解决Windows应用迁移难题。从系统架构差异分析到Wine环境配置,再到实战应用部署与优化,提供了一套完整的解决方案,确保老Windows软件在国产系统上稳定运行。

weixin_32288959的博客 649

力扣LeetCode:121. 买卖股票的最佳时机(动态规划)

在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。设计一个算法来计算你所能获取的最大利润。在这种情况下, 没有交易完成, 所以最大利润为 0。买入这只股票,并选择在。

欢迎访问我的个人Blog网站:blog.homeryland.org 430

YOLOv8改进策略【卷积层】| TIP 2025 MFA 多阶段特征聚合 大核扩感受 + 多梯度融合,强效增强弱小目标特征

红外弱小目标尺寸极小、信噪比低,在特征传递中极易丢失信息;常规卷积感受野单一、梯度源不足,难以同时捕捉局部细节与全局上下文,导致小目标特征表达弱、检测漏检。因此提出多阶段特征聚合 MFA,用大核卷积+多分支+通道注意力强化小目标特征提取。

Limiiiing的博客 59

激光雷达点云异常现象详解:鬼影、高反膨胀与拖点

现象核心外观主要成因核心硬件对策核心算法对策鬼影位置错误,出现"复制"的物体镜面反射/光学元件间杂散光物理光阑、抗反射涂层多帧时序一致性检验、反射率逻辑判断膨胀尺寸变大,轮廓呈毛刺状信号饱和、像素/通道串扰可变增益控制、随机编码序列强度阈值滤波、几何轮廓拟合(剪裁)拖点边缘粘连,出现"阶梯"或"连线"光斑跨立边缘、双回波融合小光斑光学设计、多回波支持邻域深度突变检测、波形脉宽分析这些异常现象是当前激光雷达感知中的核心难点,通常需要硬件物理特性优化与上层感知算法。

Fun_LiDAR的博客 303

力扣121:买卖股票的最佳时机

摘要:题目要求在给定股票价格数组中找到最佳买卖时机以获得最大利润。解题思路是跟踪最低买入价和当前最大利润。通过遍历数组,不断更新最低价格和计算当前卖出利润,最终返回最大利润值。代码使用minprice记录历史最低价,maxprofit保存当前最大利润差,时间复杂度为O(n)。若无法获利则返回0。

weixin_74285822的博客 360

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LeetCode:121.买卖股票的最佳时机——动态规划

121. 买卖股票的最佳时机(1、2)——动态规划、贪心策略 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择**某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票**。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 🍎道阻且长,行则将至。🍓!!!

Super algorithm 的博客,技术爱好者。 3266

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

解题思路-LeetCode第121题:买卖股票的最佳时机

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

weixin_48153141的博客 275

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Day49:Leetcode121买卖股票的最佳时机1(一次买入),Leetcode122买卖股票的最佳时机2(多次买入)

Day49:Leetcode121买卖股票的最佳时机1(一次买入),Leetcode122买卖股票的最佳时机2(多次买入)

QielinRan的博客 147

LeetCode 121:买卖股票的最佳时机(贪心算法) —— 题解

贪心算法——买卖股票的最佳时机

2601_96587588的博客 433

3月打卡活动第9天 LeetCode第121题:买卖股票的最佳时机(简单)

3月打卡活动第9天 LeetCode第121题:买卖股票的最佳时机(简单) 题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。 解题思路:双指针,左指针记录最小值,右指针依次后移 class Solution { public int ...

new_whiter的博客 155

动态规划:leetcode 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机II

c++ leetcode 动态规划

qq_52097561的博客 940

LeetCode 题目 121:买卖股票的最佳时机

5种算法实现LeetCode 题目 121:买卖股票的最佳时机

10年数据\经营分析经验,现任大厂数据分析负责人 916
上一篇: Leetcode 70:爬楼梯
下一篇: C++关于自动构造对象的隐式类型转换
冀州少主
博客等级 码龄8年 16粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值