如果我们有两个列表:
list1 = [1,2,1,1,2,4,1];
list2 = [1,2,1,3,2,1];
然后新列表包含公共元素或列表的交集,然后使用频率计数添加元素:
预期结果:
list3 = [1,1,1,2,2];
我尝试过一种方法,每次遇到一个公共元素时,我们都会增加一个存储频率的Map:
public List<Integer> getCommon(int[] a, int[] b) {
Map<Integer, Integer> frequencies = new HashMap<Integer, Integer>();
List<Integer> sets = new ArrayList<Integer>();
for (int i : a) {
for (int j=0; j<b.length; ++j) {
if (i == b[j]) {
int frequency = (int) frequencies.getOrDefault((Integer) i, 0) + 1;
frequencies.put((Integer) i, frequency);
b[j] = -1;
break;
}
}
}
for (Map.Entry<Integer, Integer> entry : frequencies.entrySet()) {
int key = (int) entry.getKey();
int value = (int) entry.getValue();
for (int i = 0; i < value; ++i) {
sets.add(key);
}
}
return sets;
}
结果将是[1, 1, 1, 1, 2, 2]