找到两个列表的交集,并根据频率创建包含元素的新列表

问题描述 投票:-4回答:1

如果我们有两个列表:

list1 = [1,2,1,1,2,4,1];

list2 = [1,2,1,3,2,1];

然后新列表包含公共元素或列表的交集,然后使用频率计数添加元素:

预期结果:

list3 = [1,1,1,2,2];
java arraylist collections frequency
1个回答
0
投票

我尝试过一种方法,每次遇到一个公共元素时,我们都会增加一个存储频率的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]

© www.soinside.com 2019 - 2024. All rights reserved.