Arrays 如何找到最小值和最大值之间的子阵列

Arrays 如何找到最小值和最大值之间的子阵列,arrays,algorithm,data-structures,Arrays,Algorithm,Data Structures,我有一个排序数组。让我们假设 {4,7,9,12,23,34,56,78}给定最小值和最大值,我想高效地在最小值和最大值之间的数组中查找元素 Cases:min=23 and max is 78 op:{23,34,56,78} min =10 max is 65 op:{12,23,34,56} min 0 and max is 100 op:{4,7,9,12,23,34,56,78} Min 30 max= 300:{34,56,78} Min =100 max=300 :{}

我有一个排序数组。让我们假设

{4,7,9,12,23,34,56,78}
给定最小值和最大值,我想高效地在最小值和最大值之间的数组中查找元素

Cases:min=23 and max is 78  op:{23,34,56,78}
 min =10 max is 65 op:{12,23,34,56}

min 0 and max is 100 op:{4,7,9,12,23,34,56,78}

Min 30 max= 300:{34,56,78}

Min =100 max=300 :{} //empty

我想找到一种有效的方法来实现这一点?我不是在要求编写任何我可以在这里使用的算法,比如DP指数搜索?

因为它是经过排序的,通过对整个数组进行二进制搜索,您可以很容易地找到大于或等于所需最小值的最小元素

二元搜索基本上会在每次迭代中将serch空间减少一半。给出了
10
的第一个示例,从
12
上的中点开始,如下所示:

 0  1  2  3  4  5  6  7 <- index
 4  7  9 12 23 34 56 78
         ^^
现在你有了它,因为这个数字少,下面的数字多(超过65)

然后,您就有了用于提取值的start-at-stop索引(3和6)

 0  1  2    3  4  5  6    7 <- index
 4  7  9 ((12 23 34 56)) 78
           -----------

0 1 2 3 4 5 6 7由于已排序,通过对整个数组进行二进制搜索,可以轻松找到大于或等于所需最小值的最小元素

二元搜索基本上会在每次迭代中将serch空间减少一半。给出了
10
的第一个示例,从
12
上的中点开始,如下所示:

 0  1  2  3  4  5  6  7 <- index
 4  7  9 12 23 34 56 78
         ^^
现在你有了它,因为这个数字少,下面的数字多(超过65)

然后,您就有了用于提取值的start-at-stop索引(3和6)

 0  1  2    3  4  5  6    7 <- index
 4  7  9 ((12 23 34 56)) 78
           -----------

0 1 2 3 4 5 6 7由于已排序,因此应执行以下操作:

List<Integer> subarray = new ArrayList<Integer>();

for (int n : numbers) {
    if (n >= MIN && n <= MAX) subarray.add(n);
}
List subarray=new ArrayList();
用于(整数n:数字){

如果自排序后(n>=MIN&&n,则应执行以下操作:

List<Integer> subarray = new ArrayList<Integer>();

for (int n : numbers) {
    if (n >= MIN && n <= MAX) subarray.add(n);
}
List subarray=new ArrayList();
用于(整数n:数字){

如果(n>=MIN&&n重复(或者可能是子集):为什么当MIN=10时9在op中?对MIN和max进行二进制搜索会起作用吗?-刚刚看到@paxdiablo post,它会执行trickDuplicate(或者可能是子集)of:当min=10时,为什么op中的9会出现?对min和max进行二进制搜索会起作用吗?-刚才看到@paxdiablo post,它会像二进制搜索一样进行二进制搜索search@ThomasAhle是,但结果(子阵列)不会被排序。但是二进制搜索当然要快得多。啊,但是没有指定。他们必须认为是这样的-排序数组的子数组本身应该被排序,你不认为吗?数组意味着排序顺序不同于集合。@ThomasAhle是的,但结果(子数组)不会被排序。但二进制搜索当然要快得多。啊,但它没有被指定。他们必须认为是这样的-排序数组的子数组本身应该被排序,你不认为吗?数组意味着排序顺序不同于集合。