0-99已排序的100个数中抽取一个数,找到抽取的数字

二分法实现

function findMissingNumber(arr, max = 99, min = 0) {
// 数组的长度应该等于最大值减最小值
if (arr.length === max - min) {
if (arr[0] !== min) {
return min;
}

if (arr[arr.length - 1] !== max) {
return max;
}

return bisection(arr, 0, arr.length - 1);
}

function bisection(arr, start, end) {
if (start + 1 === end) {
return arr[start] + 1;
}

const middle = getAverageInt(start, end);

if (middle - start < arr[middle] - arr[start]) {
// 数值之差大于下标之差,说明抽取的数字在左半边
return bisection(arr, start, middle);
} else {
return bisection(arr, middle, end);
}
}

function getAverageInt(one, two) {
return ((one + two) / 2) | 0;
}
}
展开
评论