
代码 1 二分:
- 在原来的数组上,每个元素再加一个值,由此来记录每个元素之前的下标是什么
- 因为我们 ans 是原数组的下标对应关系
- 这样我们即使排序了,也依然不用担心下标丢失
func findRightInterval(intervals [][]int) []int {
for i := range intervals {
intervals[i] = append(intervals[i], i)
}
sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] })
n := len(intervals)
ans := make([]int, n)
for _, p := range intervals {
i := sort.Search(n, func(i int) bool { return intervals[i][0] >= p[1] })
if i < n {
ans[p[2]] = intervals[i][2]
} else {
ans[p[2]] = -1
}
}
return ans
}