原题链接:
https://leetcode.cn/problems/intersection-of-two-arrays-ii/
哈希集合
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
| class Solution { public int[] intersect(int[] nums1, int[] nums2) { HashMap<Integer,Integer> hash = new HashMap<>(); for(var x : nums1){ int count = hash.getOrDefault(x,0); count++; hash.put(x,count); }
int [] ans = new int[Math.min(nums1.length,nums2.length)]; int k = 0; for(var x : nums2){ int count = hash.getOrDefault(x,0); if(count > 0){ count--; ans[k++] = x;
hash.put(x,count); } }
return Arrays.copyOfRange(ans,0,k); } }
|
解法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
| class Solution {
public int[] intersect(int[] nums1, int[] nums2) { Arrays.sort(nums1); Arrays.sort(nums2); int [] ans = new int[Math.min(nums1.length,nums2.length)]; int k = 0; for(int i = 0 , j = 0 ; i < nums1.length && j < nums2.length;){ if(nums1[i] < nums2[j]){ i++; }else if(nums1[i] > nums2[j]){ j++; }else{ ans[k] = nums1[i]; k++; i++; j++; } } return Arrays.copyOfRange(ans,0, k); } }
|