Leetcode——349-兩陣列交集

晓枫的春天發表於2024-07-19

題目描述

給定兩個陣列 nums1 和 nums2 ,返回 它們的 交集 。輸出結果中的每個元素一定是 唯一 的。我們可以 不考慮輸出結果的順序
輸入:nums1 = [1,2,2,1], nums2 = [2,2]
輸出:[2]
提示:
  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

參考實現

方式1

    public static int[] intersection(int[] nums1, int[] nums2) {
        HashMap<Integer, Integer> map = new HashMap<>();
        //放進 map 裡,k == 陣列值,v 指定 1
        for (int i : nums1) {
            map.put(i, 1);
        }
        HashSet<Integer> set = new HashSet<>();
        //宣告 set,遍歷陣列2,如果1取到等於1的值 說明是交集元素,存set
        for (int j : nums2) {
            if (map.getOrDefault(j, 0) == 1) {
                set.add(j);
            }
        }
        int[] arr = new int[set.size()];
        int i = 0;
        for (Integer integer : set) {
            arr[i++] = integer;
        }
        return arr;
    }

方式2

    public static int[] intersection1(int[] nums1, int[] nums2) {
        int[] ints = new int[1001];
        int[] ints1 = new int[1001];
        for (int i : nums1) {
            ints[i]++;
        }
        for (int i : nums2) {
            ints1[i]++;
        }
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < 1002; i++) {
            if (ints[i] > 0 && ints1[i] > 0) {
                list.add(i);
            }
        }
        int index = 0;
        int res[] = new int[list.size()];
        for (Integer i : list) {
            res[index++] = i;
        }
        return res;
    }

相關文章