標籤:數組的交集
Given two arrays, write a function to compute their intersection.Example:Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2, 2].Note:Each element in the result should appear as many times as it shows in both arrays.The result can be in any order.
題意:求兩個數組的交集,每個元素可以出現多次,返回的數組順序隨意。
public class Solution { public int[] intersect(int[] nums1, int[] nums2) { List<Integer> list=new ArrayList<Integer>(); int length1=nums1.length; int length2=nums2.length; int[] ret=new int[Math.min(length1,length2)]; int index=0; HashMap<Integer,Integer> map=new HashMap<Integer,Integer>(); for(int i=0;i<length1;i++){ if(!map.containsKey(nums1[i])){ map.put(nums1[i],1); }else{ map.put(nums1[i],map.get(nums1[i])+1); } } for(int i=0;i<length2;i++){ if(map.containsKey(nums2[i]) && map.get(nums2[i])!=0){ map.put(nums2[i],map.get(nums2[i])-1); ret[index++]=nums2[i]; } } return Arrays.copyOfRange(ret,0,index); }}
PS:
1、先申請一個長度是較小長度的數組的數組。
2、用hashmap存放第一個數組的各個數字出現的次數。
3、遍曆第二個數組,去hashmap中找,如出現,則hashmap對應的次數減1,同時將key加入到數組中。
4、最後取部分返回。。。
Leetcode 350. Intersection of Two Arrays II JAVA語言