Separate start and end times. Sort and sweep.
def minMeetingRooms(intervals): starts = sorted(i[0] for i in intervals) ends = sorted(i[1] for i in intervals)
rooms = 0
maxRooms = 0
s = e = 0
while s < len(starts):
if starts[s] < ends[e]:
rooms += 1
maxRooms = max(maxRooms, rooms)
s += 1
else:
rooms -= 1
e += 1
return maxRooms
time, space.