我必须在两个列表中找到一些常见项目。我不能排序它,顺序很重要。必须在firstList
中找到secondList
中有多少元素。现在它看起来象下面这样:如何降低两个列表算法中搜索的复杂度?
int[] firstList;
int[] secondList;
int iterator=0;
for(int i:firstList){
while(i <= secondList[iterator]/* two conditions more */){
iterator++;
//some actions
}
}
复杂算法的是N×N的。我尽量减少这种操作的复杂性,但我不知道如何以不同的方式比较元素?有什么建议?
编辑: 例子:A=5,4,3,2,3
B=1,2,3
我们找对B[i],A[j]
条件: 时
B[i] < A[j]
j++
时通过一个到列表
B[i] >= A[j]
return B[i],A[j-1]
下一个迭代元素j-1(平均for(int z=0;z<j-1;z++)
) 我不确定,我是否让自己清楚? 允许复制。
列表可能的最大尺寸是多少? – Swapnil
你能举个例子吗?这并不清楚:“必须从firstList中找到secondList中有多少个元素。” < - 包括重复吗?如果首先是{1,4,3,4},其次是{4,4},它应该如何表现? – fge
如果你不打算涉及O(n)存储,那么你理论上不能解决这个问题比O(n^2)更好。 –