两个数组的交集 II

两个数组的交集 II

整理思路:理解题意。题目要你做的很简单。

package ccf;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class num_8 {

	public static void main(String[] args) {
		int []nums1 = {4, 9, 5, 4};
		int []nums2 = {9, 4, 9, 8, 4};
		System.out.println(intersect2(nums1, nums2));

	}
	
	//使用Map,数组作为键值key,计数器作为value
	public static int[] intersect2(int[] nums1, int[] nums2) {
	        Map<Integer,Integer> map = new HashMap<Integer,Integer>();//建立整型字典
	        for(int i=0;i<nums1.length;i++) {
	        	Integer val=map.get(nums1[i]);//获得字典内键对应为num1的值
	        	map.put(nums1[i], (val==null)?1:++val);
	        }
	        System.out.println(map);
	        ArrayList<Integer> al = new ArrayList<Integer>();
	        for(int i=0,val;i<nums2.length;i++) {
	        	if(map.containsKey(nums2[i]) && (val=map.get(nums2[i]))>0) {
	        		al.add(nums2[i]);
	        		map.put(nums2[i], --val);
	        	}
	        }
	        System.out.println(map);
	     
	        
	        int[] in = new int[al.size()];
	        int e=0;
			for(int i:al)
				in[e++] = i;
			System.out.println(Arrays.toString(in));
			return in;
	        
	    }


}