LeetCode 121:买卖股票的最佳时机,从历史最低价推出一次交易贪心

题目要求 给你一个数组 prices,其中 prices[i] 表示第 i 天的股票价格。 你只能完成一次交易: 选择某一天买入一支股票 选择未来某一天卖出这支股票 返回能获得的最大利润。如果无法盈利,返回 0。 输入输出 输入:prices: List[int] 输出:最大利润 int 只能买一次、卖一次。 买入日必须早于卖出日。 可以选择不交易,此时利润是 0。 示例 输入:prices = [7,1,5,3,6,4] 输出:5 最优做法是在价格为 1 时买入,在价格为 6 时卖出,利润是 6 - 1 = 5。 输入:prices = [7,6,4,3,1] 输出:0 价格一直下降,任何买入后再卖出都会亏钱,所以返回 0。 约束 1 <= prices.length <= 10^5 0 <= prices[i] <= 10^4 Step 1:先固定买卖顺序 先看这个例子: prices = [7,1,5,3,6,4] 如果只看价格差,最大利润来自: 1 -> 6 profit = 5 这是合法的,因为价格 1 出现在价格 6 之前。 ...

2026年7月3日 · 3 分钟 · map[name:Jeanphilo]

LeetCode 55:跳跃游戏,用最远覆盖范围判断能否到达终点

题目要求 给你一个整数数组 nums。 你一开始站在下标 0。nums[i] 表示从位置 i 最多可以向右跳多少步。 题目要求判断:能不能到达最后一个下标。 输入输出 输入:nums: List[int] 输出:bool 从下标 0 出发。 每个位置的数字表示最大跳跃长度,不是必须跳这么远。 只需要判断能否到达最后一个下标,不需要返回具体路径。 示例 输入:nums = [2,3,1,1,4] 输出:true 一种跳法是: 0 -> 1 -> 4 从下标 0 可以跳到下标 1,再从下标 1 跳到最后一个下标。 输入:nums = [3,2,1,0,4] 输出:false 无论怎么跳,都会被下标 3 的 0 卡住,无法到达最后一个下标 4。 约束 1 <= nums.length <= 10^4 0 <= nums[i] <= 10^5 Step 1:不要先猜路径,先看覆盖范围 先看失败样例: nums = [3,2,1,0,4] 从下标 0 最多可以跳到下标 3。 看起来选择很多: 0 -> 1 0 -> 2 0 -> 3 当前 baseline 是: ...

2026年7月3日 · 3 分钟 · map[name:Jeanphilo]

固定间距 1 检测:一次扫描判断 1 之间至少 k 个间隔(LeetCode 1437)

副标题 / 摘要 固定间距 1 检测是典型的“事件间距校验”模型。本文按 ACERS 结构拆解题意、原理与工程迁移,并给出多语言可运行实现。 预计阅读时长:10~12 分钟 标签:数组、双指针、事件间距 SEO 关键词:固定间距 1 检测, 事件间距, LeetCode 1437, O(n) 元描述:一次扫描判断所有 1 是否至少相隔 k 个位置,含工程场景、复杂度对比与多语言代码。 目标读者 刷 LeetCode 并希望沉淀“模板题”的学习者 做监控/风控/行为分析的工程师 需要判断事件间隔是否合规的系统开发者 背景 / 动机 许多系统都有“事件不能过密”的约束:例如登录失败、报警事件、敏感操作、API 调用等。 这类问题的本质是 “事件间距是否满足阈值”,与该题完全等价。 如果能用 O(n) 一次扫描完成校验,就能直接迁移到实时系统。 核心概念 事件间距:两个事件之间至少有 k 个“空位” 在线校验:只记住上一次事件的位置即可 边界处理:初始化 last = -k-1,消除首个事件特判 A — Algorithm(题目与算法) 题目还原 给定整数数组 nums 与整数 k,若任意两个 1 之间至少有 k 个 0(等价于两次 1 的索引差 > k),返回 true,否则返回 false。 输入输出 名称 类型 描述 nums int[] 仅包含 0/1 的数组 k int 需要的最小间隔 返回 bool 是否满足间距约束 示例 1 nums = [1,0,0,0,1,0,0,1], k = 2 输出: true 示例 2 nums = [1,0,1], k = 2 输出: false C — Concepts(核心思想) 关键观察 只需要记住 上一个 1 的索引 last 当遇到新的 1:若 i - last <= k,说明间隔不足 否则更新 last = i 方法归类 单次线性扫描(One-pass Scan) 事件间距校验(Event Spacing Check) 双指针 / 贪心(Greedy with last pointer) 数学表达 若 i 和 j 是两个 1 的索引(i < j),要求: ...

2026年1月22日 · 5 分钟 · map[name:Jeanphilo]