435.non-overlapping-intervals.go 724 B

1234567891011121314151617181920212223242526272829
  1. /**
  2. * Definition for an interval.
  3. * type Interval struct {
  4. * Start int
  5. * End int
  6. * }
  7. */
  8. func eraseOverlapIntervals(intervals []Interval) (res int) {
  9. sort.Sort(inters(intervals))
  10. fast, slow, n := 1, 0, len(intervals)
  11. for ; fast < n; fast++ { // Greedy
  12. if intervals[fast].Start < intervals[slow].End { // If overlaps,
  13. if intervals[fast].End < intervals[slow].End { // Choose the interval that ends earlier
  14. slow = fast
  15. }
  16. res++
  17. } else {
  18. slow = fast
  19. }
  20. }
  21. return
  22. }
  23. type inters []Interval
  24. func (is inters) Len() int { return len(is) }
  25. func (is inters) Less(i, j int) bool { return is[i].Start < is[j].Start }
  26. func (is inters) Swap(i, j int) { is[i], is[j] = is[j], is[i] }