【算法刷題】3:兩個數組的交集

給定兩個數組,寫一個方法來計算他們的交集。 示例:數組

給定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].
複製代碼

注意:bash

  • 輸出結果中每一個元素出現的次數,應與元素在兩個數組中出現的次數一致。
  • 咱們能夠不考慮輸出結果的順序。

分析

記住要記錄數字及其出現次數,須要對這兩個數組都遍歷一遍,前後在容器記錄nums1中出現的數字及其次數,在遍歷查詢容器中是否存在nums2中的數字,好在這一次不須要再末尾遍歷輸出,也就是說咱們只須要一個基礎的鍵值對容器便可。ui

代碼

private static int[] interserct(int[] nums1, int[] nums2) {
        // 用來暫存結果,保存數組的長度以及各元素的值
        List<Integer> tmp = new ArrayList<>();
        HashMap<Integer, Integer> map = new HashMap<>();
        // 保存nums1中元素的個數
        for (int i = 0; i < nums1.length; i++) {
            Integer temp = map.get(nums1[i]);
            map.put(nums1[i], (temp == null ? 1 : temp + 1));
        }

        // 遍歷nums2,查詢
        for (int i = 0; i < nums2.length; i++) {
            if (map.containsKey(nums2[i]) && map.get(nums2[i]) != 0) {
                //存放該元素,且次數>0,則次數-1
                tmp.add(nums2[i]);
                map.put(nums2[i], map.get(nums2[i]) - 1);
            }
        }
        int[] result = new int[tmp.size()];
        int i = 0;
        for (Integer in : tmp) {
            result[i++] = in;
        }
        return result;
    }
複製代碼
相關文章
相關標籤/搜索