1. 程式人生 > 實用技巧 >[leetCode]349. 兩個陣列的交集

[leetCode]349. 兩個陣列的交集

csdn:https://blog.csdn.net/renweiyi1487/article/details/109264635

給定兩個陣列,編寫一個函式來計算它們的交集。

示例 1:

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

示例 2:

輸入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 輸出:[9,4]

雜湊

求兩個陣列的交集就是求兩個陣列的共有元素,可以使用兩個set集合來存放每個陣列中不重複的元素,然後迭代另一個set集合中的元素,如果迭代元素屬於另一個set集合則該元素屬於交集中的元素。

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        List<Integer> ans = new ArrayList<>();
        HashSet<Integer> set1 = new HashSet<>();
        HashSet<Integer> set2 = new HashSet<>();
        for (Integer num : nums1) {
            set1.add(num);
        }
        for (Integer num : nums2) {
            set2.add(num);
        }
        Iterator<Integer> it = set2.iterator();
        while (it.hasNext()) {
            int num = it.next();
            if (set1.contains(num)) {
                ans.add(num);
            }
        }
        int[] finalAns = new int[ans.size()];
        for (int i = 0; i < finalAns.length; i++) {
            finalAns[i] = ans.get(i);
        }
        return finalAns; 
    }
}

寫法二:

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        int[] output = new int[nums1.length];
        HashSet<Integer> set1 = new HashSet<>();
        HashSet<Integer> set2 = new HashSet<>();
        for (Integer num : nums1) {
            set1.add(num);
        }
        for (Integer num : nums2) {
            set2.add(num);
        }
        int idx = 0;
        for (Integer num : set2) {
            if (set1.contains(num))
                output[idx++] = num;
        }
        return Arrays.copyOf(output, idx); 
    }
}