寻找右区间——二分

57 阅读1分钟

image.png

代码 1 二分:

  1. 在原来的数组上,每个元素再加一个值,由此来记录每个元素之前的下标是什么
  2. 因为我们 ans 是原数组的下标对应关系
  3. 这样我们即使排序了,也依然不用担心下标丢失
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
}