区间调度问题

一、会议室(LeetCode 253)
这个问题在今年秋招各家笔试不知道见过多少次,听说还有人面试见过

class Solution:
    def minMeetingRooms(self, intervals: List[List[int]]) -> int:
        ans=0
        cur=0
        dic={}
        an=set()
        #题目就是要统计同一时刻进行的最大会议的数量
        for i in range(len(intervals)):
            s,e=intervals[i][0],intervals[i][1]
            if(s in dic):
                dic[s]+=1
            else:
                dic[s]=1
            if(e in dic):
                dic[e]-=1
            else:
                dic[e]=-1
            an.add(s)
            an.add(e)
        an=sorted(list(an))
        for i in range(len(an)):
            cur+=dic[an[i]]
            ans=max(ans,cur)
        return ans

二、无重叠区间(LeetCode 435)
贪心算法,挑战程序设计上的区间调度经典问题。
先按照[结束时间,开始时间]对数组排序,再引入ans记录可以调度的最大数目。

class Solution:
    def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
        if(not intervals):
            return 0;
        listan=[]
        for interval in intervals:
            listan.append([interval[1],interval[0]])
        listan.sort()
        end=-float("inf")
        ans=0
        for num in listan:
            if(num[1]>=end):
               ans+=1
               end=num[0]
            
        return len(intervals)-ans
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值