【发布时间】:2015-01-16 11:10:10
【问题描述】:
给定一个数组,例如[1, 0, -1, 2, 3, 4, 5],找到所有长度为 3 的子集,其中一个元素等于子集中其他两个元素的总和。例如:
1 + -1 == 0 (from [1, 0, -1])
2 + 3 == 5 (from [2, 3, 5])
我想出了一个O(n²) 解决方案,但我的面试官坚持认为有一个O(n log n) 解决方案。
解决这个问题的最佳方法是什么?
【问题讨论】:
-
如果数组是 [0, 0, 0, 0, 0, 0] 有多少个子集?
-
@JasonL 可能是唯一的子集(否则真的没有意义)。或者,也许给定的数组是一个集合/唯一的(也更有意义)。
-
我认为面试官只是在计数之后?因为有 O(n^2) 个这样的子集并且枚举它们需要 O(n^2) 例如数组 [1 2 3 4 5 6 7 8 9 10]
-
是的 N 选择 2。N!/(2!*(N-1)!) = N(N-1) 或 O(n^2)。那是我的论点。也许他们想甩掉我
-
谢谢大家的cmets和回答!我很感激。我的思维过程需要一些验证:)
标签: arrays algorithm data-structures