搜索包含包含所需值的范围的数组

Search arrays containing ranges which include the required value

本文关键字:范围 数组 包含包 搜索      更新时间:2023-09-26

如何找到第一个值和第二个值之间的数组(或一个数组)?我的意思是下一个:

arrays = [[0,453],[454,820],[821,1350]];
values = [320,519]

在这种情况下,我们返回:

[0,1] //320 =< [0,453] < 519 =< [454,820]

对于[30450]值:

[0,0] //30 =< [0,453] >= 450

或[2012000]:

[0,2] //20 =< [0,453] < 1200 > [454,820] < 1200 >= [821,1350]

我尝试写一个简单快速的算法,但遇到困难(缺乏知识)…并"按原样"写…:

//pseudocode
arrays = [[0,10074],[1075,1393],[1394,1418]]
values = [500,700]
for (i=0;i<arrays.length;i  ){
    if(arrays[i][0]<values[0]){ 
        first = i;
        if(arrays[i][1]>values[1]){
            second = i;
        } else if (arrays[i 1][1]>values[1]){
            second = i;
        }
        return [first, second]
    }
}

这个问题有最好的解决方法吗?重写和完成上面的伪代码值得吗?


@我很抱歉,我无法选择最好的答案。

回答四个问题——非常快速的解决方案,Tibos——非常干净的代码。

不同的目标-不同的最佳答案。

我非常喜欢数组上的函数方法。以下是我如何编写代码:

var arrays = [[0,453],[454,820],[821,1350]];
var values = [320,519];
var result = values.map(function(value){
  for (var i = 0; i<arrays.length; i++) {
    if (arrays[i][0] > value) return null;    
    if (arrays[i][1] >= value) return i; 
  }
  return null;
});
console.log(result); // [0,1]

如果值不在任何范围内,则返回null。请随意编辑代码并返回您希望的任何值。

var arrays = [[0,453],[454,820],[821,1350]];
var values = [320,519];
// values = [30,450];
// values = [20,1200];
var start = -1, end = -1;
arrays.some(function(data, idx) {
    if (data[0] > values[1] || data[1] > values[1]) {
        end = idx;
        if (start === -1) start = 0;
        return true;
    } else if (start === -1 && (data[0] > values[0] || data[1] > values[0])) {
        start = idx;
    }
    return false;
});
console.log(start, end);