Intersection of Two Arrays II
nums1 = [1, 2, 2, 1, 3, 1]
nums2 = [2, 2, 1, 3, 3]
returns [2, 2, 1, 3]Solution
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
// iterate through the bigger arra and make counts
// take the smaller array for comparison to speed it up
// for each found number, take it, write it into result and decrement by 1
int[] bigger;
int[] smaller;
if (nums1.length > nums2.length) {
bigger = nums1;
smaller = nums2;
} else {
bigger = nums2;
smaller = nums1;
}
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < bigger.length; i++) {
int number = bigger[i];
int count = map.getOrDefault(number, 0);
map.put(number, count + 1);
}
List<Integer> result = new ArrayList<>();
for (int i = 0; i < smaller.length; i++) {
int number = smaller[i];
if (map.containsKey(number)) {
int count = map.get(number);
if (count > 0) {
result.add(number);
map.put(number, count - 1);
}
}
}
int[] r = result.stream().mapToInt(Integer::intValue).toArray();
return r;
}
}Last updated