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

hot100贪心专题

1 买卖股票的最佳时机

res用于保存可能获得的最大利润,minPrice用于保存在遍历过程中的最小入手价格,初始化为Integer.MAX_VALUE;

遍历prices数组,更新minPrice和res。

最后返回res即可。

因为本题只能买入一次

class Solution { public int maxProfit(int[] prices) { int len = prices.length; int res = 0, minPrice = Integer.MAX_VALUE; for (int i = 0; i < len; i++) { if (prices[i] < minPrice) { minPrice = prices[i]; } res = Math.max(res, prices[i] - minPrice); } return res; } }

2 跳跃游戏

先单独处理一个元素的情况

maxReach = 0

for循环的条件要写 i < nums.length && i <= maxReach,只遍历「可达的位置」,且不越界。
循环里面动态更新maxReach

最后只需要判断i >= maxReach即可。

class Solution { public boolean canJump(int[] nums) { // 处理特殊情况:数组长度为1,直接返回true(已经在终点) if (nums.length == 1) { return true; } int maxReach = 0; // 初始能到达的最远位置(从索引0开始) // 循环条件:i不超过当前能到达的最远位置,且不越界 for (int i = 0; i < nums.length && i <= maxReach; i++) { // 更新能到达的最远位置 maxReach = Math.max(maxReach, i + nums[i]); // 提前终止:如果已经能到达最后一个位置,直接返回true if (maxReach >= nums.length - 1) { return true; } } // 循环结束仍未到达最后一个位置,返回false return false; } }

3 跳跃游戏Ⅱ

贪心策略:每一次跳跃都选择 “能跳的最远位置” 作为下一步的边界,这样能保证每一步都是最优的,最终得到全局最少次数。

res用于存跳的步数。

currentEnd用于存当前能到的最远边界,初始化为0;

maxReach是全局能到的最远边界,初始化为0;

class Solution { public int jump(int[] nums) { // 特殊情况:数组长度为1,不需要跳跃 if (nums.length == 1) { return 0; } int steps = 0; // 最少跳跃次数 int end = 0; // 当前步能到达的最远边界 int maxReach = 0; // 全局能到达的最远位置 // 遍历数组(注意:不用遍历最后一个元素,因为到了就不用跳了) for (int i = 0; i < nums.length - 1; i++) { // 更新全局最远可达位置 maxReach = Math.max(maxReach, i + nums[i]); // 当遍历到当前步的边界时,需要跳一次 if (i == end) { steps++; // 跳跃次数+1 end = maxReach; // 更新下一步的边界 // 提前终止:如果下一步边界已到终点,不用继续遍历 if (end >= nums.length - 1) { break; } } } return steps; } }

4.划分字母区间

预处理:先记录每个字母在字符串中出现的「最后位置」(maxIndex 数组);
遍历划分:遍历字符串时,维护当前片段的「最远结束位置(curMax)」,当遍历到这个最远位置时,说明当前片段可以闭合,记录长度并开启新片段。

class Solution { public List<Integer> partitionLabels(String s) { // 1. 初始化结果列表,存储每个片段的长度 List<Integer> res = new ArrayList<>(); // 2. 定义maxIndex数组(长度26对应26个小写字母),记录每个字母最后出现的索引 int[] maxIndex = new int[26]; // 3. 把字符串转为字符数组,方便遍历 char[] sArr = s.toCharArray(); // 4. 预处理:遍历字符串,记录每个字母的最后出现位置 for (int i = 0; i < sArr.length; i++) { // 字符转数组索引:比如 'a'->0,'b'->1... maxIndex[sArr[i] - 'a'] = i; } // 5. 定义两个关键变量: // start:当前片段的起始索引(初始为0) // curMax:当前片段需要覆盖的最远索引(初始为0) int start = 0; int curMax = 0; // 6. 遍历字符串,划分片段 for (int i = 0; i < sArr.length; i++) { // 6.1 更新当前片段的最远结束位置(必须包含当前字母的最后出现位置) curMax = Math.max(maxIndex[sArr[i] - 'a'], curMax); // 6.2 当遍历到当前片段的最远结束位置时,闭合当前片段 if (i == curMax) { // 计算当前片段长度(i - start + 1),加入结果 res.add(i - start + 1); // 开启新片段:起始位置为当前索引+1 start = i + 1; } } // 7. 返回结果列表 return res; } }
http://www.jsqmd.com/news/518283/

相关文章:

  • 西门子200smart伺服脉冲定位案例自动输送抓料与自动移印机相结合a8 1、此程序样例为自动...
  • 保姆级教程:用Xinference在本地Mac/Windows上快速部署CosyVoice-300M语音克隆模型
  • 5个实战案例教你用Wireshark揪出异常网络流量(附抓包文件)
  • KEIL调试实战:解决‘TRACE HW not present‘错误的完整指南
  • AgentScope 企业落地范式:从 SWE-Bench 63.4% 到生产级代码生成
  • 避坑指南:用GCP免费实例搭建个人博客时千万别犯这3个错误
  • 告别玩客云!用Docker在NAS上部署Aria2-Pro,打造你的私人高速下载中心
  • 用PlantUML+C4模型轻松绘制软件架构图:实战电商系统设计案例
  • 如何选择植发机构?这些机构的服务可供了解,发际线调整/3D微针植发/植发/不剃发植发/5C美学种植,植发机构哪家权威 - 品牌推荐师
  • 从‘预览不了’到‘丝滑预览’:KKFileView部署后与前端联调的完整指南(Vue/React通用)
  • Ubuntu 20.04下gtsam编译避坑指南:从源码到安装的完整流程
  • 别再手动改配置了!用Nacos动态管理SkyWalking集群,这5个坑我帮你踩过了
  • 小米AX3000T刷OpenWrt保姆级教程(含救砖指南)
  • 【2026-03-21】连岳摘抄
  • 基于LESO的永磁同步电机无感FOC 采用线性扩张状态观测器实现无感FOC,效果很好
  • 香橙派Zero3上1Panel面板的5分钟快速部署指南(附内网穿透配置)
  • 从一次应急响应看JDWP漏洞:攻击者是如何利用调试协议拿到服务器Shell的?
  • MRI图像处理实战:5分钟搞定ANTs N4偏置场矫正(附Python代码)
  • 英伟达GTC现场的隐形AI巨头:老黄机器人demo背后都是它
  • 高效解决pip安装失败的三大实用技巧
  • AI率刚好卡在红线上(15%-20%)?精准降到安全区的方法
  • 2026年阻燃料评测:探寻性能卓越的品牌之选,市场阻燃料关键技术和产品信息全方位测评 - 品牌推荐师
  • 深入解析STM32端口复用与重映射:从原理到实战配置
  • 网络工程师视角:从192.168.9.128/26出发,手把手教你规划一个真实的3子网网络
  • 光伏MPPT仿真-固定电压法+扰动观察法+电导增量法 光储并网直流微电网simulink仿真模型
  • 2026智能垃圾房优质厂家推荐适配商圈扩容需求:公交站台厂家/公交站台定制/公交站台岗亭/四分类垃圾房/垃圾房价格/选择指南 - 优质品牌商家
  • 2026年3月,国内值得关注的螺旋焊管批发推荐,目前螺旋焊管机构推荐聚焦技术实力与行业适配性 - 品牌推荐师
  • 网络攻防第二次作业
  • 单相并网逆变器闭环控制仿真。 单电流环PI控制方式。 电网电压电流同相位锁相。 输入400vdc
  • Kali Linux 2023最新国内源配置指南:解决‘无法安全更新’错误(附清华/阿里云/中科大源)