-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathMergeSimilarItems.java
42 lines (37 loc) · 1.36 KB
/
MergeSimilarItems.java
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
33
34
35
36
37
38
39
40
41
42
// https://leetcode.com/problems/merge-similar-items
// T: O(Nlog(N))
// S: O(N)
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MergeSimilarItems {
public List<List<Integer>> mergeSimilarItems(int[][] items1, int[][] items2) {
final Map<Integer, Integer> valueToWeight = getValueToWeightMapping(items1);
for (int[] row : items2) {
if (valueToWeight.containsKey(row[0])) {
valueToWeight.put(row[0], valueToWeight.get(row[0]) + row[1]);
} else {
valueToWeight.put(row[0], row[1]);
}
}
final List<List<Integer>> list = toList(valueToWeight);
list.sort(Comparator.comparingInt(a -> a.get(0)));
return list;
}
private List<List<Integer>> toList(Map<Integer, Integer> mapping) {
final List<List<Integer>> result = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : mapping.entrySet()) {
result.add(List.of(entry.getKey(), entry.getValue()));
}
return result;
}
private Map<Integer, Integer> getValueToWeightMapping(int[][] array) {
final Map<Integer, Integer> result = new HashMap<>();
for (int[] row : array) {
result.put(row[0], row[1]);
}
return result;
}
}