繁体   English   中英

查找两个数组之间的交集

[英]Find intersection between two arrays with restrictions

我必须编写一个程序才能在两个数组之间找到相同的数字。 问题是我必须遵循一些约束以最优化的方式进行操作:

-如果A [i] = B [w]且A [j] = b [x]且i,则具有数组A的i,j索引和数组B的w,x索引

-这些数字之间的最大距离必须为k(由输入得出);

-我必须使用最大O(k)空间才能实现优化搜索的功能;

-数字在每个数组(如集合)中仅出现一次。

我当时正在考虑用第一个数组的k个元素构造一个平衡的RBTree来优化搜索过程,但是我对其所需的空间有所怀疑(由于指针和颜色标记,我认为它不是O(k) )。

任何人对此问题有更好的主意吗?

编辑:我将在这里放我的示例,使其更清楚:

  • 阵列A:3 7 5 9 10 15 16 1 6 2
  • 阵列B:4 8 5 13 1 17 2 11
  • 常数k = 6
  • 输出:5 1 2

Edit2:在输出中,数字的顺序必须与数组中的顺序相同。

使用K作为最大距离

假设当您说必须按数组顺序显示它们时,一个数组的顺序就足够了-假设:

A:1 2 B:2 1

由于交叉了顺序,结果为1 2或2 1而不是1或2

请注意,K约束使此条件不太理想

第一个观察结果是,较大数组中的任何内容,超过较小数组中元素数的索引+ K -1都可以忽略

第二个观察结果是所有值显然都是int

第三个观察结果是,这对于K可能接近数组大小的大型数组必须是最佳的

基数排序为O(N),大小为O(N),因此我们将使用

为了允许使用K,我们可以将两个数组都复制到(值,位置)的并行数组中,而不是按照观察1复制在较大数组中不可达的值,即A:71、23、42 ==> A2:{71 ,0},{23,1},{42,2}

我们还可以为结果创建一个与较小数组相同大小的相似数组

我们可以修改基数排序以将值和位置一起移动

算法:

1) Copy arrays [ O(1) ]

2) Radix sort array A and B by values [ O(1) ]

3) Walk A and B: [ O(1) ]
if A < B -> increment index in A
if A > B -> increment index in B
if A == B -> incremnt index in A and B
             add original A to result IF the pos diffence is less than K    
4) Radix sort results by position [ O(1) ]

5) print result values [ O(1) ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM