java 两个数组的并集,但时间复杂度是个问题

fhg3lkii  于 2022-12-21  发布在  Java
关注(0)|答案(2)|浏览(147)

数组并集有多种在线解决方案,我自己想出了一个,它工作得很好,但也有很大的时间复杂性(显然我不知道)。所以为了更好地使用类似的逻辑,我在这里问。任何建议都是很好的!
最初有两个arrayList,大小和编号都不同。
1.第一步是将它们都追加到一个List中
1.第二步是使用**Collections.sort()方法对新数组进行排序。
1.第三种方法是使用
.remove()**删除其中的重复项。

  • //初始两个数组 *

数组1 [0,2,3,4,5]和数组2 [0,1,2,3,5,7,8]

  • //for循环将它们追加到一个arrayList中并排序 *
for(k = 0; k< array1.size();k++){
    array3.add(array1.get(k));
}
for(k = 0; k< array2.size();k++){
    array3.add(array2.get(k));
}
Collections.sort(array3);
  • //现在删除重复项 *
for(k=0; k<array3.size();k++){
    if(k != array3.size()-1){
       if(Objects.equals(array3.get(k), array3.get(k + 1))){
       array3.remove(k);
     }
   }
}
fdx2calv

fdx2calv1#

您可以通过散列集以最佳方式完成此操作

int[] array1 = {0, 2, 3, 4, 5};
int[] array2 = {0, 1, 2, 3, 5, 7, 8};
HashSet<Integer> union = new HashSet<>();

for (int element : array1) {
  union.add(element);
}

// Add all the elements of the second array to the HashSet
for (int element : array2) {
  union.add(element);
}

该解决方案不能保证并集中元素的顺序。

vof42yt1

vof42yt12#

一个月

您可以使用distinct()操作来获得给定数组的并集,该操作在底层维护LinkedHashSet以保证元素的唯一性并保持其顺序:

int[] array1 = {0, 2, 3, 4, 5};
int[] array2 = {0, 1, 2, 3, 5, 7, 8};
        
int[] union = IntStream
    .concat(Arrays.stream(array1), Arrays.stream(array2))
    .distinct().toArray();
        
System.out.println(Arrays.toString(union));
  • 输出:*
[0, 2, 3, 4, 5, 1, 7, 8]

相关问题