列表中的唯一集合总和

时间:2014-02-23 07:40:58

标签: arrays algorithm list set unique

我正在做一些算法练习并遇到过这个问题。

我有一个列表/数组,如下所示:[1,5,4,9,10,2,...]

如何返回查找具有相同总和的列表的唯一集合?例如,(5,4)等于(9),(1,5)等于6,依此类推。

我熟悉查找列表的所有集合,但是添加的技巧是集合必须是唯一的,如果一个索引用于一个集合,相同的索引不能用于另一个集合

有什么想法?感谢。

编辑:

在考虑了这个之后,这就是我所拥有的。我列出了所有可能的套装,而不是担心独特。然后我得到原始超集数组的最小值和最大值。我将值从最小值循环到最大值,递增1并检查每个集合。创建一个hashmap。如果集合的总和等于我们正在检查的值,我们将该集合添加到列表中。此外,如果集合的索引值具有键,我们将hashmap中的值关联键设置为True。继续使用hashmap条件检查每个集合。然后我们返回应该只有唯一集合的列表列表。

有意义吗?

1 个答案:

答案 0 :(得分:2)

make a list of all possible sets - 这当然是时间和空间的指数。这是一个多项式时间解决方案(如果我理解了这个问题):

  1. 遍历列表,保留两个指针 - 每次第一个递增时,第二个从指数+ 1运行到列表末尾。
  2. 对于两个元素的每个组合,如果它们的总和低于所需的总和,则它们的组合值将被推送到列表的末尾(保留包含它的原始索引)。
  3. 一旦找到完全等于和的元素组合,相应索引中的所有元素都从列表中移除,并将该集插入到脱节集的解向量中。
  4. 在此迭代过程结束时,您将拥有一组完整的脱节集 - 不一定是具有最多元素数或最多数组的集,而是一个不能从其余元素创建其他集的集在列表中。