【发布时间】:2021-02-04 23:35:26
【问题描述】:
对于二进制搜索问题,我想出了以下解决方案:
function binarySearch(arr,numba){
var left = 0
var right = arr.length - 1
while (left <= right){
let middle = Math.floor((left+right)/2)
if (arr[middle] < numba){
left ++;
}
else if (numba < arr[middle]){
right -- ;
}
else if (numba === arr[middle]){
return middle
}
}
return -1
}
但建议的解决方案是:
function binarySearc(arr, elem) {
var start = 0;
var end = arr.length - 1;
var middle = Math.floor((start + end) / 2);
while(arr[middle] !== elem && start <= end) {
if(elem < arr[middle]){
end = middle - 1;
} else {
start = middle + 1;
}
middle = Math.floor((start + end) / 2);
}
if(arr[middle] === elem){
return middle;
}
return -1;
}
第二种解决方案是否比我的解决方案更好,或者它们本质上是一样的?
【问题讨论】:
-
对我来说看起来基本相同,尽管你的看起来更干净、更容易推理、重复的代码更少。有些人对“单个返回语句”很感兴趣,需要跳出循环并执行双重条件来满足他们不惜一切代价始终只有一个返回语句的渴望。
-
在你的代码中打印
left和right值,在其他代码中打印start和end,区别应该很明显:你的代码是not 二分查找。
标签: javascript algorithm search binary-search