二分查找 查找指定数最左/最右的位置

290 阅读1分钟

题目

查找数组中的某个数,返回相同数中出现在最左边位置的索引

  • 在二分查找的基础上,当找到指定数后,不退出循环而是继续查找,若是查找最左边的数,则继续往查找到的元素左边查找,并记录每次查找到该数的位置,取最小的那个,直到left>right退出循环

let arr=[ 1, 2, 2, 2, 3, 3, 4, 5 ]

function binaryFirst(arr, n) {
  let mid,
    left = 0,
    right = arr.length - 1;

  let min = -1;

  while (left <= right) {
    mid = left + parseInt((right - left) / 2);

    if (arr[mid] == n) {
      if (min == -1) {
        min = ends.length;
      }
      min = Math.min(mid, min);
      right = mid - 1;
      continue;
    }
    if (arr[mid] > n) {
      right = mid - 1;
    } else {
      left = mid + 1;
    }
  }
  return min;
}

console.log(binaryFirst(arr, 3));