题目
查找数组中的某个数,返回相同数中出现在最左边位置的索引
- 在二分查找的基础上,当找到指定数后,不退出循环而是继续查找,若是查找最左边的数,则继续往查找到的元素左边查找,并记录每次查找到该数的位置,取最小的那个,直到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));