LintCode 数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode 数组相关的知识,希望对你有一定的参考价值。
两数组的交
两数组的交
样例: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中。
以上是关于LintCode 数组的主要内容,如果未能解决你的问题,请参考以下文章