【贪心算法】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 常用无穷大)替代。
相关推荐
shehuiyuelaiyuehao10 小时前
算法31,前缀和,可被k整除的子数组
数据结构·python·算法
203号居民12 小时前
LeetCode hot 100 — 141. 环形链表2
算法·leetcode·链表
玖玥拾12 小时前
LeetCode 202 快乐数
算法·leetcode
LuminousCPP12 小时前
数据结构-二叉树(六):BFS层序遍历与完全二叉树判断|复用链式队列 + (N_0=N_2+1) 性质证明
c语言·数据结构·笔记·算法·二叉树·宽度优先
ZhouDevin13 小时前
算法论文/数据集3——CLD(TMLR2025)压缩训练集,仅保留对验证集有益的样本
人工智能·深度学习·算法·计算机视觉
Tim_1014 小时前
【LeetCode】29、两数相除
算法·leetcode·职场和发展
船厂电气自动化ai大模型14 小时前
AI大模型与数学/第63课:矩阵定义、矩阵加法、标量乘法(逐级精讲)
数据结构·人工智能·深度学习·线性代数·算法
余额瞒着我当琳15 小时前
算法修炼 chapter 2 双指针进阶、盛最多水的容器、有效三角形的个数、两数之和、三数之和、四数之和
算法
你压到我腿毛了66615 小时前
C语言冒泡算法(Bubble sort)
c语言·数据结构·算法
靠沿16 小时前
贪心算法专题(三)
算法·贪心算法