两个数组的交集
两个数组的交集
1.数组解法
创建一个数组存储出现过的数字,遍历两个数组,遇到值就 ++ 。
有重复的元素的值指向的值会 > 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class Solution { public int[] intersection(int[] nums1, int[] nums2) { Arrays.sort(nums1); Arrays.sort(nums2); int max = nums1[nums1.length-1] > nums2[nums2.length-1] ? nums1[nums1.length-1] : nums2[nums2.length-1]; int[] res = new int[max+10];
for(int i : nums1){ if(res[i] == 0) res[i]++; }
for(int i : nums2){ if(res[i] == 1){ res[i]++; } } List<Integer> list = new ArrayList<Integer>(); for(int i = 0 ;i<res.length;i++){ if(res[i] == 2){ list.add(i); } } int[] ans = new int[list.size()]; int index = 0; for(Integer i : list){ ans[index++] = i; } return ans; } }
|
2. set解法
创建两个Set集合,先遍历第一个数组,将值 add
进去
紧接着,遍历第二个数组,利用Set的contains
方法,在遍历第二个数组时,判断元素是否在第一个数组中出现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public int[] intersection(int[] nums1, int[] nums2) { if(nums1.length ==0 || nums2.length == 0 || nums1 == null || nums2 == null) return new int[0];
Set<Integer> set = new HashSet<Integer>(); Set<Integer> res = new HashSet<Integer>();
for(int i: nums1) set.add(i); for(int i : nums2){ if(set.contains(i)) res.add(i); }
return res.stream().mapToInt(Integer::intValue).toArray(); } }
|