/** * Definition for an interval. * type Interval struct { * Start int * End int * } */ func eraseOverlapIntervals(intervals []Interval) (res int) { sort.Sort(inters(intervals)) fast, slow, n := 1, 0, len(intervals) for ; fast < n; fast++ { // Greedy if intervals[fast].Start < intervals[slow].End { // If overlaps, if intervals[fast].End < intervals[slow].End { // Choose the interval that ends earlier slow = fast } res++ } else { slow = fast } } return } type inters []Interval func (is inters) Len() int { return len(is) } func (is inters) Less(i, j int) bool { return is[i].Start < is[j].Start } func (is inters) Swap(i, j int) { is[i], is[j] = is[j], is[i] }