一、会议室(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