![[捂脸]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_28.8981538.png)
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;
}
}
二分法实现
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;
}
}
展开
评论
点赞