【发布时间】:2016-12-03 08:50:36
【问题描述】:
我有两个数组,一个排序数组 int b[] 和另一个未排序数组 int a[n] having n elements 。排序数组由未排序数组的部分或全部元素组成。现在有 M 个查询。对于每个查询值 l 和 r 给出。在每个查询中,我需要找到 a[n] 中存在的 b[] 元素的数量。
例如 -
N=5 ,M=2
a= [2 5 1 2 3]
b=[3 2 1]
for each m:
l=1 r=5 ->a[1]=1, a[5]=5 -> answer should be 3 as all elements of b i.e 1,2,3 are present in a
l=2 r=4 ->a[2]=5 , a[4]=2 ->answer should be 2 as only 1 and 2 are there in b for given value of l and r for array.
如何找到不超过O(M * LOGN)时间复杂度的答案?
注意: 数组不是必需的。如果它有助于降低时间复杂度或更容易实现代码,也可以使用向量。
【问题讨论】:
-
这听起来很像家庭作业。正确的?不幸的是,SO 不是代码编写服务。到目前为止,您尝试了什么?您的代码面临的实际问题是什么?
-
@skypjack 对不起,但这不是作业。这是使用 DP 解决的问题的一部分。现在要计算最终答案,我需要按照问题中的要求进行计算。好吧,我尝试使用嵌套的 for 循环,但时间限制超过了。
-
不能从头顶想出太多..但是..数组的元素是唯一的吗?您可以弹出找到的数组成员,避免以后对其进行迭代,并且内部循环应该在排序数组上以利用分支预测?
-
@Swift 未排序数组中的元素不一定是唯一的。