news 2026/6/18 10:47:19

贪心算法学习总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
贪心算法学习总结

贪心算法学习随笔

这段时间刷算法题,最先上手的就是贪心。比起DP、回溯要考虑各种状态、记录大量中间数据,贪心写起来明显轻松很多。一开始我以为贪心万能,随便一道题都套“每次选最好的”思路,踩了好几次坑才明白,它有很明确的使用限制,不能凭直觉乱写。下面结合我做题时的真实思路和代码记录一下。

一、贪心到底是什么

它的核心逻辑很简单:处理问题时,每一步只选当下看起来最优的方案,选定之后不会回头修改,一路做到结束。
生活里找零钱、安排时间都自带这种思维。但这里有个关键前提:一步步的局部最优,最后合在一起必须是整体最优,不满足这个前提,答案一定会错。

二、入门例题:活动安排

题目要求同一时间只能参加一个活动,给出所有活动的起止时间,算出最多能参加几场。
我一开始试了两种思路,先按开始时间排序,结果安排到后面很容易被长活动占住时间;换成按结束时间从小到大排序后,每次挑结束最早的,剩下的空闲时间最多,能塞下更多活动,这才是正确局部策略。

importjava.util.*;classActivity{intstart,end;Activity(ints,inte){start=s;end=e;}}publicclassTest{publicstaticvoidmain(String[]args){List<Activity>acts=newArrayList<>();acts.add(newActivity(1,3));acts.add(newActivity(2,4));acts.add(newActivity(3,5));acts.add(newActivity(6,7));// 按结束时间升序acts.sort((a1,a2)->a1.end-a2.end);intcount=0;intlastEnd=-1;for(Activitya:acts){if(a.start>=lastEnd){count++;lastEnd=a.end;}}System.out.println(count);}}

这段代码跑出来结果是3,是这组数据下能参加的最大数量。

三、零钱兑换,看清贪心的局限

标准人民币面额50、20、10、5、1,凑金额优先选大额,完全没问题。

publicclassCoin{publicstaticvoidmain(String[]args){int[]coins={50,20,10,5,1};inttarget=63;intcnt=0;intrest=target;for(intc:coins){if(rest>=c){cnt+=rest/c;rest=rest%c;}}System.out.println(cnt);}}

但如果换一组特殊面额,比如只有1、3、4,凑6块钱。
按照贪心思路,先拿4,剩下两个1,一共3张;但最优解是两张3,只用两张。这里贪心就失效了。
做完这道题我才记牢:不是所有求最值的题都能用贪心,得先手动模拟小数据验证策略是否成立。

四、能用贪心的两个条件

  1. 贪心选择性:每一步最优的选择,最终能导向全局最优;
  2. 最优子结构:整个问题的最优解,包含子问题的最优解。
    两个条件缺一个,贪心都不适用,要换成动态规划。

五、平时刷题常遇到的贪心题型

  1. 区间类:活动安排、区间覆盖,统一思路是排序后依次筛选;
  2. 分配类:分饼干、分糖果,两边排序后一一匹配;
  3. 数字构造:拼接数字求最大或最小值,自定义排序规则;
  4. 行程类:跳跃游戏、加油站,每一步选最远可到达位置。

六、贪心的优缺点

优点很明显,只需要一次排序加单层循环,运行速度快,代码量少,不用开数组存大量中间状态,调试起来简单。
缺点也很突出,适用场景窄,很多复杂问题满足不了贪心条件;而且正确性很难一眼看出来,必须手动举例验证,不能直接写代码。

学习小结

贪心算是入门最简单的算法,但也是最容易误用的。我之前做题总懒得验证策略,直接上手写代码,经常出现样例过了、测试数据出错的情况。
现在我自己固定一套做题流程:先想一种局部最优策略,手动用简单数字试一遍,确认能得到全局最优,再动手写代码;如果模拟后结果不对,直接放弃贪心,改用动态规划或者暴力枚举。
对比其他算法能明显感觉到,贪心不需要记录过往所有状态,走一步定一步,逻辑直白,但能不能用全看题目本身的特性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 10:42:59

基于APIPOST的WebSocket接口测试环境搭建与实战指南

1. 项目概述&#xff1a;为什么需要WebSocket接口测试环境&#xff1f;如果你做过前后端分离的项目&#xff0c;尤其是涉及到实时数据推送的场景&#xff0c;比如在线聊天、股票行情、协同编辑或者游戏状态同步&#xff0c;那你一定对WebSocket不陌生。它不再是传统HTTP那种“一…

作者头像 李华
网站建设 2026/6/18 10:27:16

从Jupyter到生产:PyTorch模型服务化实战指南

1. 项目概述&#xff1a;当模型走出Jupyter&#xff0c;真正开始呼吸真实世界的空气 “From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题本身就像一句暗号&#xff0c;专为那些在Jupyter里调通了模型、画出了漂亮ROC曲线、却在部署时被现实迎…

作者头像 李华
网站建设 2026/6/18 10:23:58

Mello Retail Inc. 版权诉讼特征总结,Dnl Zito 律所图片维权应对技巧

跨境知识产权精选科普好文&#xff5c;案件编号&#xff1a;26-cv-01135&#xff5c;发饰配饰 / 家居日用 / 美妆工具卖家必读避雷指南加拿大网红发饰品牌全平台版权维权&#xff0c;3 张产品主图放倒 600 卖家&#xff0c;DNL 律所隐匿式起诉&#xff0c;拆解 TRO 规则 高频…

作者头像 李华
网站建设 2026/6/18 10:14:10

Grok-4.2 Beta实战指南:长上下文场景下的高稳定性、高性价比LLM部署

1. 项目概述&#xff1a;这不是又一个“参数堆料”的模型&#xff0c;而是长文本场景里被低估的务实派最近在几个技术社群里&#xff0c;频繁看到有人发截图&#xff1a;“Grok-4.2 Beta跑通了128K上下文&#xff0c;推理延迟比Llama-3-70B低40%”、“用它做法律合同比对&#…

作者头像 李华
网站建设 2026/6/18 10:10:19

解决“求解器未找到”错误:环境配置与路径排查全攻略

1. 问题现象与核心场景剖析“the demanded solver was not found in the specified path.” 这个错误信息&#xff0c;对于经常和各类科学计算库、仿真软件或优化工具打交道的开发者来说&#xff0c;绝对是个“老熟人”。它通常在你满怀期待地运行一段代码&#xff0c;准备求解…

作者头像 李华
网站建设 2026/6/18 10:09:48

AgentScope实战指南:如何构建生产级AI智能体评估体系

AgentScope实战指南&#xff1a;如何构建生产级AI智能体评估体系 【免费下载链接】agentscope Build and run agents you can see, understand and trust. 项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope 在AI智能体快速发展的今天&#xff0c;开发者和研…

作者头像 李华