当前位置: 首页 > news >正文

LeetCode 121. 买卖股票的最佳时机(C语言详解 | 贪心算法)

一、题目描述

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

你只能选择某一天买入股票,并选择在未来某一天卖出股票

设计一个算法来计算你所能获取的最大利润

如果无法获得利润,返回0


示例 1

输入: [7,1,5,3,6,4] 输出: 5

解释:

第2天买入 (价格=1) 第5天卖出 (价格=6) 最大利润 = 6 - 1 = 5

示例 2

输入: [7,6,4,3,1] 输出: 0

解释:

价格一直下降,没有盈利机会

二、题目分析

题目的关键限制:

必须先买,再卖

所以不能简单:

最大值 - 最小值

例如:

[7,6,4,3,1]

最大值 = 7
最小值 = 1

7 在 1 前面,不能先买1再卖7。


三、核心思路(贪心算法)

我们在遍历数组时维护两个变量:

minPrice :历史最低价格 maxProfit :最大利润

遍历每一天:

1 计算今天卖出的利润

profit = prices[i] - minPrice

2 更新最大利润

maxProfit = max(maxProfit, profit)

3 更新最低价格

minPrice = min(minPrice, prices[i])

四、图解过程

数组:

[7,1,5,3,6,4]

遍历过程:

天数价格历史最低价当前利润最大利润
07700
11100
25144
33124
46155
54135

最终结果:

maxProfit = 5

五、C语言实现

int maxProfit(int* prices, int pricesSize) { if (pricesSize == 0) { return 0; } int minPrice = prices[0]; int maxProfit = 0; for (int i = 1; i < pricesSize; i++) { // 计算今天卖出的利润 int profit = prices[i] - minPrice; if (profit > maxProfit) { maxProfit = profit; } // 更新历史最低价格 if (prices[i] < minPrice) { minPrice = prices[i]; } } return maxProfit; }

六、复杂度分析

时间复杂度

O(n)

只遍历一次数组。


空间复杂度

O(1)

只使用常数变量。


七、优化思路(动态规划角度)

其实也可以理解为动态规划问题

定义:

dp[i] = 第 i 天卖出股票能获得的最大利润

但由于只依赖:

历史最低价格

所以可以将 DP压缩成两个变量

minPrice maxProfit

因此最终代码只需要O(1) 空间


八、总结

本题核心思想只有一句话:

遍历数组时记录历史最低价格,并尝试在当前价格卖出,更新最大利润。

步骤:

1️⃣ 记录历史最低价
2️⃣ 计算当前卖出利润
3️⃣ 更新最大利润


九、相关题目

股票系列题目(LeetCode经典):

题号题目
121买卖股票的最佳时机
122买卖股票的最佳时机 II
123买卖股票的最佳时机 III
188买卖股票的最佳时机 IV
309最佳买卖股票时机含冷冻期
714含手续费的股票交易

建议顺序:

121 → 122 → 309 → 714 → 123 → 188

这是LeetCode 股票问题完整体系

http://www.jsqmd.com/news/454133/

相关文章:

  • MyBatis-Plus常用注解
  • 2026专业展厅电子沙盘优质厂家推荐指南:展厅多媒体/三维数字孪生定制/展厅电子沙盘/数字展厅设计/选择指南 - 优质品牌商家
  • Java Web项目中数据库验证的实现步骤
  • 破局硬件困局:Larfe拉孚,以全栈硬件能力赋能物联网平台落地
  • Web前端开发--应该有一批程序员去专注。
  • 基于SSM+VUE的戏曲文化交流小程序[java]-计算机毕业设计源码+LW文档
  • 打开网站显示Bad Request错误怎么办|已解决
  • 2026年橡胶木品牌优选指南 十大品质企业参考 - 十大品牌榜
  • 小程序制作平台综合评测:码云数智、有赞、微盟深度解析 - 码云数智
  • Windows环境修改redis密码
  • Discuz!NT负载均衡方案
  • 对于事件、事件流、事件触发的顺序随便说说
  • 2026年教育行业小程序开发指南:北京定制化服务商深度解析 - 品牌2026
  • C# vs C++ 全局照明渲染性能比试
  • leetcode 36: 是否有效数独
  • C#内嵌汇编代码的讨论
  • 振弦式锚索测力计 安全监测传感器
  • 2026家教机构大比拼,这些家教值得你关注,一对一家教试听课/全托冲刺/全托一对一/全托集训营,家教老师排行 - 品牌推荐师
  • 数据仓库维度建模思维导图—— 基于《The Data Warehouse Toolkit, 3rd Edition》(第三版修订版)
  • 回firelong之C#慢
  • 深度揭秘:量产车型VCU整车管理控制器策略开发
  • 预制混凝土消防水池安装与维护评测:厂商服务能力考察,装配式镀锌钢板水箱/不锈钢水箱,预制混凝土消防水池源头厂家怎么选 - 品牌推荐师
  • [特殊字符] CI/CD 自动化部署流程设计完全指南
  • 2026年衣柜专用板材品牌优选指南 十大企业品牌参考 - 十大品牌榜
  • 正运动技术即将亮相合肥工业自动化展
  • 2026年度国家自然科学基金项目形式审查自查表(下载)
  • 【Golang】——Gin 框架中间件详解:从基础到实战
  • 按需选择,拒绝盲目跟风——手机存储容量的理性取舍
  • 周红伟:腾讯让14亿人来养龙虾,QClaw - 腾讯推出的基于OpenClaw的 - 今日头条
  • Python Tkinter 温度转换器二次开发实践