面试高频区间调度类问题总结 interval scheduling

首先分析一下区间类问题:

  1. 一般都有时间顺序,
  2. 有开始和结束。
  3. 是一个vector,包含了这些开始时间和结束时间

解法总结:

  1. 最容易想到的就是要对时间进行排序。可能是对开始时间进行排序,也可能是对结束时间进行排序。 比如meeting room, 问一个人能不能参加所有meeting,只需要对开始时间进行排序,然后检查前面的结束,和后面的开始是不是冲突就能解决了。
  2. 扫描线算法,碰到一个start就+1, 碰到一个end就-1。 这个算法挺简单,可以想象成同时有多少会议在进行,开始一个就加一,结束一个就减一。 最大值就是meeting room ii 的答案,最多需要多少meeting room。
  3. 在排序之上,比如meeting room ii,用priority queue,对结束时间进行排序,然后就按照开始时间一个个对比。我们的目标是让pq记录在用的会议室的结束时间。 所以最后pq的size就是我们要的答案。
  • 如果当前开始时间比pq上最早的结束时间要晚,那说明这两个可以共用一个会议室呀。那就pop掉这个结束时间,push 上新的结束时间。pq的长度不变。
  • 如果当前开始时间小于pq上最早时间,那说明会议室不够用了,连最早结束时间都满足不了,其他肯定也不行,直接push上新的结束时间。pq长度+1
  • 一直到最后一个区间,pq长度在这段时间只增加不减少。

4. 贪心算法:始终选择具有最早结束时间的区间。然后就能获得最大数量的不重叠区间。因为具有最早结束时间的区间产生了最大的容纳其余区间的能力。

  • 比如当前剩余区间的最早结束时间是x。可用于其他区间的时间段就是[x:]。如果我们选择另一个结束时间为y的区间,那么可用时间段将变为[y:]。由于x ≤ y,因此没有办法使[y:]比[x:]容纳更多的区间。所以这个贪心算法可以hold。
  • 因此可以按结束时间对区间进行排序,并跟踪当前最早的结束时间。一旦下一个区间的开始时间早于当前结束时间,我们就必须移除一个区间。否则,就更新最早的结束时间。

56. Merge Intervals 中等题 面试出现28次

Interval Scheduling是一种算法,用于解决在给定时间段内选择能够完成的最多工作的问题,同时确保工作之间没有重叠。这个问题可以用一个包含工作开始时间和结束时间的集合来表示。 Interval Scheduling问题是一个经典的调度问题,可以通过贪心算法来解决。贪心算法的思想是,在每个时间点选择结束时间最早的工作,直到找到一个不与已选择的工作重叠的工作为止。这样就能够找到一个最优解,即完成最多工作的调度方案。 在Interval Scheduling算法中,我们首先将工作按照结束时间的先后顺序进行排序。然后从第一个工作开始,选择不与已选工作重叠的下一个工作,将其加入到最终的工作集合中。重复这个过程,直到没有可选的工作为止。最后得到的工作集合就是完成最多工作的调度方案。 Interval Scheduling问题可以应用于多种场景,比如会议室的调度、航班的安排等。通过使用Interval Scheduling算法,我们可以有效地安排工作,最大程度地提高工作的效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [算法导论英文复习](https://blog.csdn.net/troublenbfriend/article/details/118229333)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [interval scheduling问题](https://blog.csdn.net/weixin_43220691/article/details/120211573)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值