标签:
样例:nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, 返回 [2]
.
解答一:用两个HashSet
public int[] intersection(int[] nums1, int[] nums2) { Set<Integer> set = new HashSet<Integer>(); Set<Integer> inter = new HashSet<>(); for(int i=0; i<nums1.length; i++){ set.add(nums1[i]); } for(int j=0; j<nums2.length; j++){ if(set.contains(nums2[j])){ inter.add(nums2[j]); } } int[] rst = new int[inter.size()]; int k = 0; for(Integer s: inter){ rst[k++] = s; } return rst; }
解答二:对两个数组排序,然后各用一个指针遍历。
public int[] intersection(int[] nums1, int[] nums2) { Set<Integer> set = new HashSet<Integer>(); Arrays.sort(nums1); Arrays.sort(nums2); int i=0, j=0; while(i<nums1.length && j<nums2.length){ if(nums1[i]<nums2[j]){ i++; }else if(nums1[i]>nums2[j]){ j++; }else{ set.add(nums1[i]); i++; j++; } } int[] arr = new int[set.size()]; int k = 0; for(Integer s: set){ arr[k++] = s; } return arr; }
解答三:对num2排序,然后遍历num1中的数,在num2中进行二分查找,找到就放入set中。
标签:
原文地址:http://www.cnblogs.com/hesier/p/5638521.html