Skip to content

Commit e53a308

Browse files
solves intersection of 2 arrays II
1 parent cdfd534 commit e53a308

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

src/IntersectionOfTwoArraysII.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import java.util.ArrayList;
2+
import java.util.HashMap;
3+
import java.util.List;
4+
import java.util.Map;
5+
6+
public class IntersectionOfTwoArraysII {
7+
public static int[] intersect(int[] array1, int[] array2) {
8+
Map<Integer, Integer> frequency1 = getFrequencies(array1);
9+
Map<Integer, Integer> frequency2 = getFrequencies(array2);
10+
return intersection(frequency1, frequency2);
11+
}
12+
13+
private static Map<Integer, Integer> getFrequencies(int[] array) {
14+
Map<Integer, Integer> result = new HashMap<>();
15+
for (int element : array) {
16+
result.put(element, result.getOrDefault(element, 0) + 1);
17+
}
18+
return result;
19+
}
20+
21+
private static int[] intersection(Map<Integer, Integer> frequency1, Map<Integer, Integer> frequency2) {
22+
List<Integer> result = new ArrayList<>();
23+
for (Map.Entry<Integer, Integer> entry : frequency1.entrySet()) {
24+
int number = entry.getKey();
25+
int frequency = entry.getValue();
26+
if (frequency2.containsKey(number)) {
27+
addNumber(result, number, Math.min(frequency, frequency2.get(number)));
28+
}
29+
}
30+
return toArray(result);
31+
}
32+
33+
private static void addNumber(List<Integer> list, int number, int frequency) {
34+
while (frequency-- > 0) {
35+
list.add(number);
36+
}
37+
}
38+
39+
private static int[] toArray(List<Integer> list) {
40+
int[] array = new int[list.size()];
41+
for (int index = 0 ; index < array.length ; index++) {
42+
array[index] = list.get(index);
43+
}
44+
return array;
45+
}
46+
}

0 commit comments

Comments
 (0)