查找范围数(a [i],a [i + 1]),其中包含范围a,b中i的值k

时间:2020-03-09 15:44:00

标签: c++ algorithm data-structures

给定一个由n个元素组成的数组,我如何找到范围数[min(A [i],A [i + 1]),max(A [i],A [i + 1])]包含给定值k。对于基于零的索引,i位于0 <= a

例如,对于下面的数组,其中a = 1,b = 3;

6 3 2 8 5

假设k = 3,必须在[min(A [1],A [2]),max(A [1],A [2])]和[min(A [2] ],A [3]),max(A [2],A [3])]。这里k = 3出现在[2,3]和[2,8]范围内,所以答案是2。

在某些预先计算的情况下,如何在不到线性时间内找到范围计数?

我不需要确切的代码,只需要对方法/数据结构进行高层概述即可。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以通过预先踢出数组{em> A 的所有元素 i 来填充(A[i-1] <= A[i] and A[i] <= A[i+1]) or ((A[i-1] >= A[i] and A[i] >= A[i+1])来节省一些时间。然后,对有效间隔范围编号进行计数应该仍然相同。

int ctr = 0; 
for(i=a;i<b-1;i++) 
{ 
  if ( (A[i]<=k && A[i+1]>= k) ||  (A[i]>=k && A[i+1]<= k) ) 
    ctr++; 
} 
printf(" Count: %i", ctr);