天天看點

Leetcode 350 兩個數組的交集||

分享下自己的思路:

 1,首先将nums1裡面的數值以鍵值對的形式放到HashMap裡,數值以鍵放,值就是數值出現的次數

  2,周遊nums2中的數,如果鍵和nums2中的數值相等,把這個數值添加到List集合中,并且HashMap中數值對應的次數就減一

  3,最後将List集合中數值進行周遊放到一個數值中

public class Solution {
/**
 * 需求:給定兩個數組,編寫一個函數來計算它們的交集
 * 執行個體:輸入: nums1 = [1,2,2,1], nums2 = [2,2]
 *   輸出:[2,2]
 *   執行個體:輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
 *   輸出:[4,9]
 */
	public static void main(String[] args) {
		int [] nums1 = {4,9,5};
		int [] nums2= {9,4,9,8,4};
		System.out.println(Arrays.toString(intersect(nums1,nums2)));
	}
	public static int[] intersect(int[] nums1, int[] nums2) {
		//1,首先将nums1裡面的數值以鍵值對的形式放到HashMap裡,數值以鍵放,值就是數值出現的次數
		List<Integer> lists=new ArrayList<Integer>();
		HashMap<Integer,Integer>  map =new HashMap<Integer,Integer>();
		for(int num:nums1) {
			if(map.containsKey(num)) {
				map.put(num,map.get(num)+1);
			}
			else {
				map.put(num,1);
			}
		}
		//2,周遊nums2中的數,如果鍵和nums2中的數值相等,把這個數值添加到List集合中,并且HashMap中數值對應的次數就減一	
		
		for(int num:nums2) {
			if(map.containsKey(num)&&map.get(num)!=0) {
				lists.add(num);
				map.put(num,map.get(num)-1);
			}
		}
		int [] result =new int [lists.size()];
		for(int i=0;i<lists.size();i++) {
			result[i]=lists.get(i);
		}
		return result;
	}
}