Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数组中查找范围_Javascript_Arrays_Sorting - Fatal编程技术网

Javascript 在数组中查找范围

Javascript 在数组中查找范围,javascript,arrays,sorting,Javascript,Arrays,Sorting,假设我们有一个这些元素的数组(总是排序的) 我们的目标是找到给定值的最小索引和最大索引,例如,假设我们正在搜索元素3的最小索引和最大索引 我们很快看到,3的最小索引是8,最大索引是11 对于值1,最小值为0,最大值为3 您将如何开发一个在JavaScript中返回最小值和最大值的解决方案?我尝试过这样做,但我不知道如何做,我总是得到错误的答案。您可以尝试Array.indexOf()和Array.lastIndexOf() var-sortedar=[1,1,1,1,2,2,2,3,3,3];

假设我们有一个这些元素的数组(总是排序的)

我们的目标是找到给定值的最小索引和最大索引,例如,假设我们正在搜索元素3的最小索引和最大索引

我们很快看到,3的最小索引是8,最大索引是11

对于值1,最小值为0,最大值为3


您将如何开发一个在JavaScript中返回最小值和最大值的解决方案?我尝试过这样做,但我不知道如何做,我总是得到错误的答案。

您可以尝试
Array.indexOf()
Array.lastIndexOf()

var-sortedar=[1,1,1,1,2,2,2,3,3,3];
控制台日志(分拣机索引(1));
控制台日志(SorterDar.lastIndexOf(1))
var数据={1,1,1,1,2,2,2,3,3,3,3};
var值=3;
var min=data.length;
var max=0;
for(var输入数据){
if(数据[键]==值){
如果(最大键){
max=键;
}
}
控制台日志(分钟);
控制台日志(最大值);
这就是你想要的吗

var myarr=[1,1,1,1,2,2,2,3,3,3];
var minNum=myarr[0];
var maxNum=myarr[1];
变量minNumStartINDX、maxNumStartINDX、minnumendx、maxnummendindx;
/********************************************/
对于(变量x=0;x=myarr[x]){
minNum=myarr[x];
minnumendx=x;
}
}
对于(变量x=0;x=myarr[x]){
minNumStartINDX=x;
打破
}
}
对于(变量x=0;xif(maxNum基本上
Array.indexOf()
Array.lastIndexOf()
将执行此操作,但他们将执行线性搜索(使用循环遍历整个数组直到找到元素),这显然是在线性时间
O(n)
内完成的

如果您的数组总是被排序,那么我们可以使用此属性对其进行优化并使用二进制搜索。它的速度更快,并且将在对数时间
O(logn)
内完成

之后,我们只需检查找到的索引之前(和之后)的元素,直到找到一个与我们的元素不相等的元素

要查找上次发生的事件,请执行以下操作:

var i= foundIndex;
while(sortedArr[i] == sortedArr[foundIndex]){
    i++;
}
foundIndex = i;
var i= foundIndex;
while(sortedArr[i] == sortedArr[foundIndex]){
    i--;
}
foundIndex = i;
第一次出现时:

var i= foundIndex;
while(sortedArr[i] == sortedArr[foundIndex]){
    i++;
}
foundIndex = i;
var i= foundIndex;
while(sortedArr[i] == sortedArr[foundIndex]){
    i--;
}
foundIndex = i;
就是这样!这对运行时间有很大帮助,特别是当您有大阵列时。
您可以在任何地方找到二进制搜索实现,只需使用其中的任何一个即可。

这不是答案,也是您的答案,下一次发布代码。这是家庭作业吗?显而易见的答案是
code
var data=[1,1,1,1,2,2,2,3,3,3,3];var value=1;var min=data.length;var max=0;for(var-key-in-data){if(data){[key]==value){if(keymax){max=key;}}}}}}console.log(min);console.log(max);