数据结构与算法(3)——贪心算法

数据结构与算法(3)——贪心算法

  • 1. 贪心算法的定义与特点
  • 2. 贪心算法的解题思路
  • 3. LeetCode中的贪心算法题

1. 贪心算法的定义与特点

定义:所谓“贪心”,就是每次只考虑自己附近局部范围的最优解,但这种局部最优会导致全局最优。

2. 贪心算法的解题思路

考虑当前的附近一两步即可

3. LeetCode中的贪心算法题

455. 分发饼干

简评:简单的贪心算法,将“胃口”和“饼干”按升序排列后,每次都只考虑“胃口”最小的小孩,然后把最小的饼干给他,如果不够,那继续考虑更大的饼干,如果所有饼干都不能满足这个小孩,那后面“胃口”更大的小孩也自然满足不了。

135. 分发糖果

简评:此题需要两轮贪心操作,从左往右贪心,以及从右往左贪心。

435. 无重叠区间

简评:此题需要先排序(排序只需要右端点升序排列即可,没必要两端都进行排序),再贪心。这里可以贪心是因为右端点已经升序了,左端点如果能不相交,就能把区间吸纳进来,如果相交,那就说明这个区间不满足要求,看下个区间,这样逐步地拉伸区间范围。

630. 课程表 III

简评:贪心+最大堆。首先还是按照lastday从小到大排序,同时还维护一个最大堆,我按照lastday从小到大依次考虑每个课程,但每次还把他们(上过的课)的持续时间压到最大堆里,如果遇到某个课程安排不下,即持续时间+当前时间>lastday的时间,那么我就考虑最大堆里最大的持续时间是不是超过我当前的持续时间,如果是,就说明之前那个课不应该考虑(就是上过的课,但是我反悔了,不上了),应该上当前课(注意此时一定是安排地下的,因为当前课的lastday更长,且持续时间更短)

你可能感兴趣的:(数据结构,贪心算法,算法)