【问题标题】:Binary search in a numerical array [duplicate]数值数组中的二进制搜索[重复]
【发布时间】:2021-05-16 07:42:26
【问题描述】:

我有一个排序数组,第一个值总是等于或大于1,我需要找到最左边的元素的索引,等于或大于N

[1, 3, 3, 4, 5, 7, 11, 11, 12, 15]

我需要的是一个递归二分查找函数,它可以找到预期的元素,所以在示例中,当N 等于11 时,它会返回6 作为输出。

【问题讨论】:

  • “我需要的是一个递归二进制搜索函数,它可以找到预期的元素” - 享受实现它的乐趣(SO 不是免费的代码编写服务)。如果您有实际问题,您可以回来,我们会帮助您解决这个问题(假设您提供 minimal reproducible example 以便我们可以重现问题)。
  • @TigranAbrahamyan .indexOf() 有什么帮助?
  • @Andreas .indexOf() 总是返回第一个找到的索引
  • this answer中给出了二分查找实现

标签: javascript arrays search


【解决方案1】:

已编辑!!!

好的,现在我收到了这个问题,我之前的回答是因为没有很好地阅读这个问题。答案并不比以前复杂多少。注意:如果没有值 >= n,则索引将为 -1,否则您将获得排序数组中第一个满足值的索引 >= n。

var n = 11;
var idx = [1, 3, 3, 4, 5, 7, 11, 11, 12, 15].findIndex(each => each >= n);
console.log('idx = '+idx);

【讨论】:

  • 对于N = 10?
  • 现在很好地阅读了这个问题,我已经发布了一个可能是最简单的解决方案的编辑。
【解决方案2】:

一个简单的 for 循环就可以解决问题,正如它在此函数中的实现方式所示。

let arr=[1, 3, 3, 4, 5, 7, 11, 11, 12, 15]; // Array you want to test
let n=11; // Number to be n
function getVal(a,num){
   for(let i=0;i<a.length;++i){
      if(a[i]>=num)return i; // Look for val that's >= n.
   }
}
getVal(arr,n);
      

【讨论】:

  • 二分搜索怎么样?为什么要重新实现 Array.findIndex
猜你喜欢
  • 1970-01-01
  • 2020-02-28
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-10
相关资源
最近更新 更多