力扣链接:436.寻找右区间
难度:⭐⭐
解题关键词:二分查找
解题思路:先建立每个开头元素及其索引的数组,之后二分查找到比每个 item 的 end 大一点点的索引。
typescript
function findRightInterval(intervals: number[][]): number[] {
const len = intervals.length;
const startArrInfo = [];
const result = new Array(len).fill(0);
// 将所有开头元素,以及它的下标索引加入 startArrInfo 中
for (let i = 0; i < len; i++) {
startArrInfo.push([intervals[i][0], i]);
}
// 排序
startArrInfo.sort((aArr, bArr) => aArr[0] - bArr[0]);
for (let i = 0; i < len; i++) {
let left = 0;
let right = len - 1;
let target = -1;
// 二分查找,比当前 end 大一点点的 位置
while (left <= right) {
const mid = Math.floor((right - left) / 2) + left;
if (startArrInfo[mid][0] >= intervals[i][1]) {
target = startArrInfo[mid][1];
right = mid - 1;
} else {
left = mid + 1;
}
}
// 放到结果数组中
result[i] = target;
}
return result;
}