1. 程式人生 > >刷爆LeetCode之 兩個陣列的交集 II

刷爆LeetCode之 兩個陣列的交集 II

兩個陣列的交集 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;
		      
    }