[LeetCode] 349. Intersection of Two Arrays


題目說明

給定兩個陣列 num1 和 num2 ,返回他們的交集。

輸出結果中的每個元素一定是唯一的,可以不用考慮輸出結果的順序。

範例測試資料說明

範例 1:

輸入:nums1 = [1,2,2,1],nums2 = [2,2]
輸出:[2]

範例 2:

輸入:nums1 = [4,9,5],nums2 = [9,4,9,8,4]
輸出:[9,4]
補充:[4,9] 也是可以接受的。

解法 : 使用 Set 去除相同數值

  1. 先走訪 num1 使用 Set 去除相同數值
  2. 然後走訪 num2 ,並且判斷是否有 set1 相同的數值,如果有就存入 set2
  3. 最後走訪 set2 ,並且將存入陣列中,輸出答案

Code 如下:

public int[] intersection(int[] nums1, int[] nums2) {
     // 將 nums1 的元素放入 set1
     Set<Integer> set1 = new HashSet<>();
     for (int i : nums1) {
         set1.add(i);
     }

     // 將 nums2 的元素放入 set2
     Set<Integer> set2 = new HashSet<>();
     for (Integer i : nums2) {
         if (set1.contains(i)) {
             set2.add(i);
         }
     }

     // 將 set2 轉成陣列
     int[] ans = new int[set2.size()];

     int i = 0;
     // 將 set2 的元素放入 ans
     for (Integer num : set2) {
         ans[i++] = num;
     }

     return ans;
}