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

标签 javascript undefined binary-search

我正在开发一个函数,该函数应该从整数列表中返回最接近的较低数字到目标。 (即 [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/

相关文章:

c# - 如何在 List<T>.BinarySearch 中有效地复制 ArrayList.BinarySearch?

javascript - 返回未定义的 Posts.findOne();

javascript - 如何使用 JavaScript 检查多个复选框?

javascript - 函数中缺少元素

java - JPA 2.1 表示属性 "indexes is undefined"

algorithm - 在 O(logN) 时间复杂度中使用 HashMap 对节点链表进行二进制搜索

javascript - React 上下文消费者如何访问消费组件的引用

javascript - javascript中如何识别输入是否为小数

typescript 运行时错误 : cannot read property of undefined (enum)

c# - 对数组中的 BinarySearch 感到困惑