刷爆LeetCode之 兩個陣列的交集 II
阿新 • • 發佈:2018-12-11
兩個陣列的交集 II
給定兩個陣列,編寫一個函式來計算它們的交集。
示例 1:
輸入: nums1 = [1,2,2,1], nums2 = [2,2] 輸出: [2,2]
示例 2:
輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 輸出: [4,9]
說明:
- 輸出結果中每個元素出現的次數,應與元素在兩個陣列中出現的次數一致。
- 我們可以不考慮輸出結果的順序。
解題思路:
用一個Map來把nums1存放,鍵存放nums1中的數字,值存放nums1中的數出現的次數
遍歷nums2,遇到重複的部分就放入一個ArrayList中。
把ArrayList中的數放到陣列中返回。
程式碼如下:
public static int[] intersect(int[] nums1, int[] nums2) { HashMap <Integer,Integer> hm= new HashMap<>(); ArrayList<Integer> arr= new ArrayList<>(); for(int i=0;i<nums1.length;i++){ if(hm.containsKey(nums1[i])) { //遍歷陣列,如果有重複的就放進map中,在map中記錄出現次數 hm.replace(nums1[i], hm.get(nums1[i])+1); } else { hm.put(nums1[i], 1); } } for(int i=0;i<nums2.length;i++) { if(hm.containsKey(nums2[i]) && hm.get(nums2[i])>0) { //用map與nums2進行比較,有重複的話就放進arr中 arr.add(nums2[i]); hm.replace(nums2[i], hm.get(nums2[i])-1); } } int [] res= new int[arr.size()]; for(int k=0;k<res.length;k++){ res[k]=arr.get(k); } return res; }