首先给出一个Node类:
class Node {
int id;
}
// 输入两个Node的集合,计算两个集合里,Node的最大重复次数的差
// 举例:
// left = [1, 2, 1, 2, 3], 重复最多的是 1 或 2, 都是出现了[2次]
// right = [2, 3, 4, 3, 3, 3],重复最多的是 3,出现了[4次]
// diff = 2次 - 4次 = -2
答案:
int diff(List<Node> left, List<Node> right){
return getMaxCount(left)- getMaxCount(right);
}
// 获取集合中 最大重复次数
public int getMaxCount(List<Node> list){
int maxCount = 0;
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0;i<list.size();i++) {
int id = list.get(i).id;
int num = map.containsKey(id) ? map. get(id) : 0;
map.put(id, ++num);
if(maxCount < num) maxCount = num;
}
return maxCount;
}
原理:
遍历集合,使用集合中的元素的值,作为map的key,map的value为该元素在集合中出现的次数。