【贪心算法】LC 121.买卖股票的最佳时机

文章目录

前言

本专栏文章为《LeetCode 热题 100》的刷题题解,相关内容如有侵权,立即删除。

一、题目

1、原题链接

121.买卖股票的最佳时机

2、题目描述

二、个人思路整理

1、思路分析

核心思路:在遍历数组的同时,不断更新历史最低买入价,并计算当前价格卖出能赚的利润,实时维护最大利润。

核心公式:当天的最大收益=max(之前的最大收益,今天价格-历史最低价)

核心操作时:维护最小买入价格、计算新利润来维护最大利润。

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),一个for循环,一次遍历。
  • 空间复杂度: O ( 1 ) O(1) O(1),仅变量空间,常数阶,未开辟其他辅助空间 。

2、解题代码

cpp 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int minPrice = INT_MAX; // 最低买入价格
        int ans = 0; // 最大利润
        for (auto price : prices) {
            // 尝试更新最低买入价格
            minPrice = min(minPrice, price);
            // 尝试更新最大利润
            ans = max(ans, price - minPrice);
        }
        return ans;
    }
};

三、知识风暴

  • INT_MAX:定义在 <climits> 中,表示 int的最大值(在绝大多数现代 32 位和 64 位系统中,int 占 4 个字节(32 位)。其中最高位为符号位,因此 int 的取值范围是 − 2 31 -2^{31} −231 到 2 31 − 1 2^{31} - 1 231−1),INT_MAX具体数值为:2147483647(约 2.14 × 10 9 2.14 \times 10^9 2.14×109,即 21 亿多)。
  • 防溢出:对 INT_MAX 做加法会溢出变负数,需做加法时改用 long long 或用 0x3f3f3f3f(约 10 亿,图论/DP 常用无穷大)替代。
相关推荐
yi0118 小时前
DAY28: LeetCode 111. 二叉树的最小深度
人工智能·笔记·python·算法·leetcode·二叉树·递归
wuyk5558 小时前
27.LeetCode 2265. 统计值等于子树平均值的节点数 —— 后序遍历实战
stm32·单片机·嵌入式硬件·算法
xiangyun618 小时前
C++ list 模拟实现(二):const迭代器与反向迭代器,模板的黑魔法
开发语言·数据库·c++·算法·stl·list
xxwl5859 小时前
三、区域赛算法模版第三章---字符串相关算法
笔记·学习·算法
信奥卷王9 小时前
[GESP202509 六级] 划分字符串(含视频)
数据结构·算法
酒醉的胡铁9 小时前
相似度搜索的常见算法
算法·ai
局部有解9 小时前
Leetcode Hot100 - 最长连续序列
算法·leetcode·职场和发展
行者全栈架构师10 小时前
给开源 Rust 工具加一个新检查项,TRAE 帮我从想法跑到构建产物:全链路实战
前端·算法·架构
行者全栈架构师10 小时前
【鸿蒙心迹】冷启动从 2.8s 优化到 0.9s——耗时拆解与数据对比实战(HarmonyOS 7.x)
前端·算法·架构
LXY_BUAA10 小时前
《嵌入式操作系统》_framebuffer驱动_20261008
linux·运维·算法