从一个阵列中删除元素,这些元素位于另一个阵列中

时间:2017-01-21 10:24:07

标签: algorithm

我在采访中有一个问题。

有2个阵列。

arr1 = {3,5,6,8,1,6,7};
arr2 = {5,6,8};

所以最终输出是

arr1 = {3,8,1,7};

我可以用O(n^2)时间来回答。

有没有更好的方法呢。

此致

拉​​杰什

2 个答案:

答案 0 :(得分:1)

你可以在O(n + m)时间内通过从第二个数组构造一个HashSet来用作查找。这些查找在O(1)中运行,并且需要O(m)来构建集合。

然后你只需在O(n)中迭代你的第一个数组,并只保留所需的元素。

答案 1 :(得分:0)

您可以使用HashSet在O(n)中执行此操作。在HashSet中添加第二个数组元素,并在一次传递中迭代第一个数组 -

这会给你O(n)

下面的Java实现。请忽略任何拼写错误

int[] arr2 = {5,6,8};
Set toBeRemoved = new HashSet<Integer>();
for(int i:arr2){
toBeRemoved.add(i);
}
for(int i:arr1){
if(toBeRemoved.contains(i)){
//Logic to remove from array
//Or else if you dont have space contraint just add elements to a new array
}
}
相关问题