【贪心算法】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 常用无穷大)替代。
相关推荐
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark2 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her12 天前
并查集-听课笔记
笔记·算法·并查集
码流子2 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven2 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark2 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218612 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法