Here is the solution:
function canAttendMeetings(intervals)
if length of intervals <= 1 then
return true
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
Time: for sorting. Space: extra.
Once sorted, any overlap must occur between adjacent meetings. If meeting starts before meeting ends, they conflict.