type arr2d [][]int func (a arr2d) Len() int { return len(a) } func (a arr2d) Less(i, j int) bool { return a[i][0] < a[j][0] } func (a arr2d) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func findMinArrowShots(points [][]int) (cnt int) { n := len(points) if n <= 1 { return n } sort.Sort(arr2d(points)) beg, end := points[0][0], points[0][1] for i := 1; i < n; i++ { if b, e := points[i][0], points[i][1]; beg <= b && b <= end { beg = b if e < end { end = e } } else { cnt++ beg, end = b, e } } cnt++ return }