贪心,就是取局部最优解,通常贪心问题能获得最优解的情况都是当前局部最优不会影响到全局最优,或者可以扩大到全局最优,如果从全局的角度来看,当前局部最优的选择策略是错误的,那么贪心算法就不适用了
贪心问题就是不考虑全局,尽可能的选择某种属性的物品,只有当局部最优可以扩展到全局最优的时候,贪心的策略才是正确的
主要有以下几种类型
1.贪心+...算法
贪心作为一个经典算法,经常和其他的算法一起考察,其中较为重要的是贪心+排序和贪心+模拟
贪心+排序
这里的排序,一般都是发现题目中所有元素的共同性,运用这个属性进行排序
普通排序 跳跳! - 洛谷
需要推公式的排序 见下
有关区间问题的排序 见下
贪心+模拟
根据题目给的要求,模拟,并作出贪心的选择,一般比较复杂,需要考虑多种情况,最好分析结束再编程
P1016 [NOIP1999 提高组] 旅行家的预算(贪心+模拟)_qq12323qweeqwe的博客-CSDN博客
双指针+贪心
双指针+贪心会应用到双指针各种性质,做出贪心的选择并不难,难的是运用双指针算法
455. 分发饼干_qq12323qweeqwe的博客-CSDN博客
最大子段和(贪心,一维,二维)_qq12323qweeqwe的博客-CSDN博客
763. 划分字母区间(滑动窗口,贪心)_qq12323qweeqwe的博客-CSDN博客
前缀和差分贪心
前缀和总结_qq12323qweeqwe的博客-CSDN博客
差分总结(一阶,二阶)_qq12323qweeqwe的博客-CSDN博客
2.区间问题
区间问题是贪心问题的经典题型
区间问题,特别要在意的是排序的选择
左端点升序,左端点降序,右端点升序,右端点降序
尽管名字相似,但在排序后,他们可以达到的效果是截然不同的
1.左端点升序
左端点升序,左端点越小的在数组前面
左端点升序的特点是,只按照左端点为第一关键字升序,那么他后面的数组元素有可能会比他完全小(如图被完全包含),而并不会比他完全大,这个性质与右端点升序是相反的
2.右端点升序
右端点升序,右端点越小的在数组前面
如图,和刚才的左端点升序完全相反,后面的元素有可能比他完全大,而不会完全小,这两种性质在贪心问题中经常遇到
同理,右端点降序是只有完全小,没有完全大
左端点降序是只有完全大,没有完全小
区间选点问题
模板题:905 区间选点_qq12323qweeqwe的博客-CSDN博客
应用题:
中等 110. 防晒(区间选点,贪心)_qq12323qweeqwe的博客-CSDN博客
112. 雷达设备_qq12323qweeqwe的博客-CSDN博客
进阶 127. 任务(贪心,二维区间选点问题)_qq12323qweeqwe的博客-CSDN博客
最大不相交区间
最大不相交区间类似于区间选点问题
模板题 908. 最大不相交区间数量_qq12323qweeqwe的博客-CSDN博客
简单 无重叠区间
leetcode 56. 合并区间(区间,贪心)_qq12323qweeqwe的博客-CSDN博客
区间分组
区间分组和区间选点问题是区间问题的常见题型,区间分组问题使用了最小堆来优化,可以达到O(nlogn)的时间复杂度
模板题 906. 区间分组_qq12323qweeqwe的博客-CSDN博客
中等: 111. 畜栏预定(贪心,区间分组)_qq12323qweeqwe的博客-CSDN博客
P4447 [AHOI2018初中组]分组_qq12323qweeqwe的博客-CSDN博客
区间覆盖
模板题:907. 区间覆盖_qq12323qweeqwe的博客-CSDN博客
不等式
在贪心题目中,常常需要找出某种性质进行排序,不等式就是其中的一种性质
排序不等式
913. 排队打水(贪心,排列不等式)_qq12323qweeqwe的博客-CSDN博客
均值不等式
1235. 付账问题(贪心,均值不等式)_qq12323qweeqwe的博客-CSDN博客
绝对值不等式
模板题:104. 货仓选址_qq12323qweeqwe的博客-CSDN博客
进阶题:122. 糖果传递_qq12323qweeqwe的博客-CSDN博客
字符串贪心
字符串贪心就是对字符串进行的一系列贪心操作
模板题:best cow line(字符串贪心)_qq12323qweeqwe的博客-CSDN博客e
简单:179. 最大数_qq12323qweeqwe的博客-CSDN博客
中等:1239. 乘积最大(字符串贪心)_qq12323qweeqwe的博客-CSDN博客
推公式
推公式即递推不等式,通过递推发现邻项的性质,常用邻项交换