# \#350 Intersection of Two Arrays II ## *給定兩數字陣列, 回傳兩陣列中重複的數字(回傳type:array), 且重複次數為較小的一方* ## Log - build 20210707 by syhuang ## 改進 - 改進初見寫法, 去掉一個map, 改用沒轉map的陣列做基準跑迴圈判斷是否存在map中, 且出現次數(map.value)>0, 存在的話就存入result, 同時該樹的出現次數(map.value)-1 - 降低Memory用量, leetcode memory比例約50% ```javascript= var intersect = function(nums1, nums2) { var getMap = function(nums){ let result = new Map(); for(let i=0; i<nums.length; i++){ result.set(nums[i], result.has(nums[i])?(result.get(nums[i])+1):1); } return result; }; let n1Map = getMap(nums1); let result = []; nums2.forEach(function(val){ if(n1Map.has(val) && n1Map.get(val) > 0){ result.push(val); n1Map.set(val,n1Map.get(val)-1); } }); return result; }; ``` ## 初見 - 把兩個傳入的陣列轉為map, 對應的value是各自key在原陣列中出現的次數, 然後以其中一陣列為基準跑迴圈, 當key有出現在另一map時, 把key存入result(存入的次數為兩map的value較小的一方) - 記憶體使用量比較高(leetcode memory 比例約5%) ```javascript= var intersect = function(nums1, nums2) { var getMap = function(nums){ let result = new Map(); for(let i=0; i<nums.length; i++){ result.set(nums[i], result.has(nums[i])?(result.get(nums[i])+1):1); } return result; }; let n1Map = getMap(nums1); let n2Map = getMap(nums2); let result = []; n1Map.forEach(function(val,key){ if(n2Map.has(key)){ for(let i=0; i<Math.min(val,n2Map.get(key)); i++){ result.push(key); } } }); return result; }; ``` ## 備註 ## 參考 - [參考解](https://leetcode.com/problems/intersection-of-two-arrays-ii/discuss/82241/AC-solution-using-Java-HashMap) ###### tags: `leetcode`, `leetcode-easy`