如何把一个带重复元素的集合拆分成多个不带重复的小集合?

集合包含元素29,36,37,37,39,39,955,955,955,961,961,962,962
如何拆分成
29,36,37,39,955,961,962
37,39,955,961,962
955
三个小集合?

阅读 2k
3 个回答

python版 (新手python 应该还有更好的写法)

datas = [29, 36, 37, 37, 39, 39, 955, 955, 955, 961, 961, 962, 962]
elementCounts = {}

maxCount = 0
for data in datas:
    if data in elementCounts:
        count = elementCounts[data]
    else:
        count = 0
    elementCounts[data] = count + 1
    if count + 1 > maxCount:
        maxCount = count + 1

sets = []
for i in range(maxCount):
    sets.append(set())
for key in elementCounts.keys():
    count = elementCounts[key]
    for i in range(count):
        sets[i].add(key)


print(sets)

用字典:

const input = [29, 36, 37, 37, 39, 39, 955, 955, 955, 961, 961, 962, 962];
const elementCounts = {};

input.forEach((element) => {
  elementCounts[element] = (elementCounts[element] || 0) + 1;
});

const sets = [];

Object.keys(elementCounts).forEach((element) => {
  const count = elementCounts[element];
  for (let i = 0; i < count; i++) {
    if (!sets[i]) {
      sets[i] = new Set();
    }
    sets[i].add(parseInt(element, 10));
  }
});

console.log(sets);

输出:

[
  Set(7) { 29, 36, 37, 39, 955, 961, 962 },
  Set(5) { 37, 39, 955, 961, 962 },
  Set(1) { 955 }
]
新手上路,请多包涵
    val sourceArray: Array<Int> = arrayOf(29, 36, 37, 37, 39, 39, 955, 955, 955, 961, 961, 962, 962)
    val array: MutableList<MutableSet<Int>> = ArrayList()

    for ((index, value) in sourceArray.withIndex()) {
        t2@ for (i in 0..index) {
            if (array.size == i) {
                array.add(HashSet())
                array[i].add(value)
                break@t2
            } else {
                if (array[i].add(value)) {
                    break@t2
                }
            }
        }
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题