【发布时间】:2021-10-16 01:56:02
【问题描述】:
我正在尝试在 javascript 中使用 for 循环实现二进制搜索,但它失败了一些测试用例,下面是我的代码
function binarySearch(arr, val){
let start = 0
let end = arr.length - 1
let middle = Math.floor((start + end)/2)
for(let i = start; i<= end; i++){
if(val === arr[middle]) {
return middle
}
if(val < arr[middle]){
end = middle - 1
}
if(val > arr[middle]){
start = middle + 1
}
middle = Math.floor((start + end)/2)
}
return -1
}
// test case:1 console.log(binarySearch([5, 6, 9, 10, 13, 14, 18, 30, 34, 35, 37, 40, 44, 64, 79, 84, 86, 95, 96, 98, 99], 9))
// test case:2 console.log(binarySearch([1,3,4,5,6,7,8,9, 10], 10))
它通过了第二个测试用例,但悲惨地失败了第一个测试用例。有谁能给点灯吗?
【问题讨论】:
-
看来您有错字。
val > middle应该是val > arr[middle]。 -
if(val > middle)? -
@Ouroborus 虽然您的建议是正确的,但问题仍然存在。我意识到在这种情况下为什么不使用“for循环”。这是因为在循环内部我分配了一个新值,但是当您意识到“i”的值保持与最初初始化的起始值相同时,就会出现问题。 i
标签: javascript algorithm data-structures binary-search