Hot100中的:贪心专题

发布时间:2026/7/29 3:32:08

Hot100中的:贪心专题 前言贪心就是局部最优达到最终全局最优就是不回头的意思每一步选择最优的选择最后到达终点的时候就是全局最优总结贪心的核心就是维护一个当前最优状态最远距离 / 最小价格 / 最远边界等在一次遍历中不断更新这个最优状态121.买卖股票的最佳时机关键信息一句话总结遍历数组维护历史最低购入价格用当前价格减去最低购入价格不断更新最大利润classSolution{publicintmaxProfit(int[]prices){// 贪心在 购入最低价格 卖出最高价格 然后不断记录利润最大值intbuyInprices[0];intprofit0;for(inti0;iprices.length;i){buyInMath.min(prices[i],buyIn);profitMath.max(prices[i]-buyIn,profit);}returnprofit;}}反思我没有明白怎么进行建模我能想到低买高卖但是怎么写出来就不知道55.跳跃游戏关键信息一句话总结贪心维护当前能够到达的最远位置只要当前位置不超过该范围就持续扩展最远距离分析它很像BFS一层一层地寻找classSolution{publicbooleancanJump(int[]nums){intmaxReach0;for(inti0;inums.length;i){if(imaxReach){returnfalse;}// 一层一层 寻找下一次能到的最远距离maxReachMath.max(nums[i]i,maxReach);}returntrue;}}反思我没有想明白如何开始寻找最大步数写法很混乱没想清为什么是for循环不用模拟题目这样跳45.跳跃游戏II关键信息一句话总结每次在当前跳跃范围内寻找下一步最远可达位置遍历到当前边界时完成一次跳跃并更新新的边界classSolution{publicintjump(int[]nums){intjumps0;intend0;intmaxReach0;// 其实就是在跳跃的范围中选择一个跳最远的步数 maxReachfor(inti0;inums.length-1;i){maxReachMath.max(maxReach,inums[i]);if(iend){jumps;endmaxReach;}}returnjumps;}}反思我没有想明白maxReach Math.max(maxReach, i nums[i]);的含义这一句就是在寻找每一步跳跃的过程中下一次能够到达的最远位置763.划分字母区间关键信息一句话总结记录每个字符最后出现的位置遍历字符串不断更新当前片段的最远边界当遍历到边界时就可以切分一个片段classSolution{publicListIntegerpartitionLabels(Strings){int[]lastnewint[26];for(inti0;is.length();i){// 记录26个字母最后出现的位置last[s.charAt(i)-a]i;}ListIntegerresultnewArrayList();intstart0;intend0;for(inti0;is.length();i){// 延申到最远位置 因为最远位置有可能包含 所以取大的!endMath.max(end,last[s.charAt(i)-a]);// 切割if(iend){result.add(end-start1);starti1;}}returnresult;}}反思我没有想到记录每个字母最后出现的位置这一步我有思考到延申

相关新闻