在排序数组中查找元素的第一个和最后一个位置

106 阅读1分钟

leedcode

var searchRange = function(nums, target) {
    const findFirst = (arr, bool) => {
          debugger;
          let low = 0;
          let high = arr.length - 1;
          while (low < high) {
            const mid = bool
              ? Math.floor((low + high) / 2)
              : Math.floor((low + high + 1) / 2);
            if (target > arr[mid]) {
              low = mid + 1;
            } else if (target === arr[mid]) {
              if (bool) {
                high = mid;
              } else {
                low = mid;
              }
            } else {
              high = mid - 1;
            }
          }
          return arr[low] === target ? low : -1;
        };
        if (nums.length === 0) return [-1, -1];
        const first = findFirst(nums, true);
        if (first == -1) return [-1, -1];
        const last = findFirst(nums, false);
        return [first, last];

};