| 1234567891011121314151617181920212223242526272829303132333435363738 | /** * Definition for an interval. * type Interval struct { *	   Start int *	   End   int * } */func findRightInterval(intervals []Interval) []int {	n := len(intervals)	res, starts := make([]int, n), make([][]int, n)	for i := 0; i < n; i++ {		starts[i] = []int{intervals[i].Start, i}	}	sort.Sort(ints(starts))	for i := 0; i < n; i++ {		beg, end := 0, n-1		for beg <= end {			mid := beg + (end-beg)/2			if starts[mid][0] < intervals[i].End {				beg = mid + 1			} else {				end = mid - 1			}		}		if beg == n {			res[i] = -1		} else {			res[i] = starts[beg][1]		}	}	return res}type ints [][]intfunc (is ints) Len() int           { return len(is) }func (is ints) Less(i, j int) bool { return is[i][0] < is[j][0] }func (is ints) Swap(i, j int)      { is[i], is[j] = is[j], is[i] }
 |