Sort by start time, then check if any meeting starts before the previous ends:
function canAttendMeetings(intervals)
sort intervals by start time
for i from 1 to length - 1
if intervals[i].start < intervals[i-1].end then
return false
return true
After sorting, if no adjacent pairs overlap, then no pairs overlap at all. Why? If meeting overlaps with meeting (where ), then meeting must also overlap with meeting (since starts after starts, but ends after starts).
Time: . Space: if sorting in place.