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

[LeetCode] 350. 兩個陣列的交集 II

一開始的想法是:用一個map來儲存長度較長的陣列中的所有數字,再與較短的陣列中的數字比較,若出現在較長陣列中,則map中的數量減一,最後用原始map與比較結束後的map比較,得到重複的數字有哪些。

答案的解法:

用一個數組來儲存比較的結果:

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        // 將長度短的陣列換到前面。
        if (nums1.length > nums2.length) {
            return intersect(nums2, nums1);
        }
        
// 建立 HashMap 記錄 nums1 中每個元素出現的次數。 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (int num : nums1) { int count = map.getOrDefault(num, 0) + 1; map.put(num, count); } int[] ans = new int[nums1.length]; int index = 0;
// 遍歷陣列 nums2 中元素,在 HashMap 中個數大於 0 則記錄。 for (int num : nums2) { int count = map.getOrDefault(num, 0); if (count > 0) { ans[index++] = num; count--; if (count > 0) { map.put(num, count); }
else { map.remove(num); } } } // 遍歷完成返回重複元素長度的結果陣列。 return Arrays.copyOfRange(ans, 0, index); } } 作者:iceblood 連結:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/solution/350ti-liang-ge-shu-zu-de-jiao-ji-ii-by-iceblood/ 來源:力扣(LeetCode) 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。