gpt4 book ai didi

javascript - 二进制搜索以查找最接近目标的数字。未定义为返回值

转载 作者:行者123 更新时间:2023-12-03 02:27:40 24 4
gpt4 key购买 nike

我正在开发一个函数,该函数应该从整数列表中返回最接近的较低数字到目标。 (即 [1,23,45,67,94,122],目标 = 96。应返回 94)。我已经多次检查我的代码,试图“捕获错误”,使该函数返回“未定义”,但我一直无法找出原因......当我通过该过程打印出我的变量时,它们都匹配我想要什么,但我的返回值仍然是未定义的。我在想我的问题出在前两个条件中,但是我仍然不知道为什么。有什么线索吗?

这是我的代码:

function binarySearch(arr,target){
var midpoint = Math.floor(arr.length/2);

if (arr[midpoint] === target){
return arr[midpoint];
}
if (arr.length === 1){
return arr[0];
}

if (arr[midpoint] > target){
binarySearch(arr.slice(0,midpoint),target);
}else if (arr[midpoint] < target){
binarySearch(arr.slice(midpoint),target);
}
}

binarySearch([1,23,45,67,94,122],96); => 预期返回值 = 94//获取 = 未定义。 :/

最佳答案

因此,原始算法似乎是错误的,选择小于目标的最大值,而不是在数值上最接近目标的值。

这是另一个版本,灵感来自 a java version ,但是是为 ES6 编写的,并且像问题的代码一样递归。

function binarySearch(arr, target, lo = 0, hi = arr.length - 1) {
if (target < arr[lo]) {return arr[0]}
if (target > arr[hi]) {return arr[hi]}

const mid = Math.floor((hi + lo) / 2);

return hi - lo < 2
? (target - arr[lo]) < (arr[hi] - target) ? arr[lo] : arr[hi]
: target < arr[mid]
? binarySearch(arr, target, lo, mid)
: target > arr[mid]
? binarySearch(arr, target, mid, hi)
: arr[mid]
}

console.log(binarySearch([1, 23, 45, 67, 94, 122], 96)) //=> 94
console.log(binarySearch([1, 23, 45, 67, 94, 122], 47)) //=> 45
console.log(binarySearch([1, 23, 45, 67, 94, 122], 207)) //=> 122
console.log(binarySearch([1, 23, 45, 67, 94, 122], 0)) //=> 1

关于javascript - 二进制搜索以查找最接近目标的数字。未定义为返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48875912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com