【发布时间】:2014-03-24 19:15:55
【问题描述】:
我正在做一些算法练习并遇到了这个。
我有一个列表/数组,如下所示:[1, 5, 4, 9, 10, 2, ...]
我将如何返回找到具有相同总和的列表的唯一集?例如,(5, 4) 等于 (9),(1, 5) 等于 6,以此类推。
我熟悉查找列表的所有集合,但增加的技巧是集合必须是唯一的,因为如果一个索引用于一组,相同的索引不能用于另一组.
有什么想法吗?谢谢。
编辑:
在考虑了更多之后,这就是我所拥有的。我列出了所有可能的集合,而不是担心唯一性。然后我得到原始超集数组的最小值和最大值。我循环遍历从最小值到最大值的值,递增 1 并检查每一组。创建一个哈希图。如果集合的总和等于我们正在检查的值,我们将该集合添加到列表中。此外,如果集合的索引值具有键,我们将哈希图中的值关联键设置为 True。继续使用 hashmap 条件检查每个集合。然后我们返回应该只有唯一集合的列表列表。
有意义吗?
【问题讨论】:
-
我认为你的意思不是独一无二,而是disjoint。我希望
1+5 = 6,而不是 5。 -
我认为这没有正确定义 - 你想返回任何不相交集的集合吗?还是最大/最小的?无论如何,您的解决方案在时间和空间上都是指数级的,所以我很确定它可以做得更好..
-
任何不相交集的集合。是的,第一次破解是指数级的,试图让它下来。编辑:相反,单个总和加上递归调用是 O(n) 。如果我循环遍历整个范围,它就会变成指数级。
-
I make a list of all possible sets- 仅此一项就时间和内存的定义而言是指数级的。
标签: arrays algorithm list set unique