Skip to content

力扣链接: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;
}