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 . After sorting, intervals[i+1].start <= intervals[j].start. So if intervals[i].end > intervals[j].start, then intervals[i].end > intervals[i+1].start too.
Time: . Space: if sorting in place.