Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
Arrays 包含给定查询点的间隔数_Arrays_Algorithm_Sorting_Intervals - Fatal编程技术网

Arrays 包含给定查询点的间隔数

Arrays 包含给定查询点的间隔数,arrays,algorithm,sorting,intervals,Arrays,Algorithm,Sorting,Intervals,我知道存在类似的问题。我的问题也一样,我有N个区间(有些可能重叠,有些甚至相同)。然后给出Q点查询,我需要告诉有多少间隔包含这个点 我试图通过对端点数组进行排序,然后按照回答中提到的+1,-1技巧计算重叠间隔的数量来开发我的算法。但是在执行二进制搜索之后,我应该做什么呢?因为前缀和数组的对应索引并不总是答案 e.g. Intervals are : [1,4] [5,7] [6,10] [7,13] sorted end point array : [1,4,5,6,7,7,10,13] +1

我知道存在类似的问题。我的问题也一样,我有N个区间(有些可能重叠,有些甚至相同)。然后给出Q点查询,我需要告诉有多少间隔包含这个点

我试图通过对端点数组进行排序,然后按照回答中提到的+1,-1技巧计算重叠间隔的数量来开发我的算法。但是在执行二进制搜索之后,我应该做什么呢?因为前缀和数组的对应索引并不总是答案

e.g. 
Intervals are : [1,4] [5,7] [6,10] [7,13]
sorted end point array : [1,4,5,6,7,7,10,13]
+1/-1 array : [1,-1,1,1,1,-1,-1,-1]
prefix sum array : [1,0,1,2,3,2,1,0]

Query : 10
my algorithm gives 1 (corresponding prefix array)
but actual ans should be 2.

我应该如何修正我的算法

您链接的问题没有好的答案,因此:

第一:

  • 将每个间隔的入口和出口位置放入单独的数组中。(如果使用闭合间隔,则退出位置为结束位置+1,即在[4,6]中,进入为4,退出为7
  • 对数组进行排序
  • 然后,对于每个点p:


  • 在条目数组中进行二进制搜索以查找条目位置的数量问题是您的区间是[]而不是[],答案可能是后者。首先将末端索引转换为值-1

    在此+“压缩”重复坐标后,您应该有:

     points = [1,5,6,7,8,11,14]
     sums = [1,0,1,1,-1,-1,-1]
     accumulated = [1,1,2,3,2,1,0]
    

    然后对于查询,如果querypoints[max]返回0。如果不是,则对点进行二进制搜索以获得索引,答案取决于累计的[index]。

    可以有多少间隔?终点有多大?@juvian NWhy实际答案是3?只有[5,7]和[6,10]包含6你是对的。但是仍然检查q=10,它给出1,但应该给出2。编辑question@SujanDutta二进制搜索=匹配低于或等于查询的最高点。在本例中,它表示8,因此索引为4,并累加[4]是2我现在明白了。我更喜欢这个解决方案,只是当在同一个地方有多个起点或终点时,在进行二进制搜索时需要小心。
     points = [1,5,6,7,8,11,14]
     sums = [1,0,1,1,-1,-1,-1]
     accumulated = [1,1,2,3,2,1,0]