题目
给你一个区间数组 intervals ,其中 intervals[i] = [starti, endi] ,且每个 starti 都 不同 。
区间 i 的 右侧区间 可以记作区间 j ,并满足 startj >= endi ,且 startj 最小化 。注意 i 可能等于 j 。
返回一个由每个区间 i 的 右侧区间 在 intervals 中对应下标组成的数组。如果某个区间 i 不存在对应的 右侧区间 ,则下标 i 处的值设为 -1 。
示例 1:
输入:intervals = [[1,2]]
输出:[-1]
解释:集合中只有一个区间,所以输出-1。
解
class Solution {public int[] findRightInterval(int[][] intervals) {int n = intervals.length;// 这里注意是IntegerInteger[] index = new Integer[n];for (int i = 0; i < n; i++) {index[i] = i;}Arrays.sort(index, (i, j) -> {return intervals[i][0] - intervals[j][0];});int[] result = new int[n];for (int i = 0; i < n; i++) {int end = intervals[i][1];int right = search(intervals, index, end);int idx = index[right];result[i] = intervals[idx][0] >= end ? idx : -1;}return result;}public int search(int[][] intervals,Integer[] index,int target){int left = 0;int right = intervals.length -1;while(left < right){int mid = left + (right - left) /2;if(intervals[index[mid]][0] >= target){right = mid;}else{left = mid+1;}}return left;}
}