【发布时间】:2021-05-16 09:15:05
【问题描述】:
我在 leetcode 上查看了 Two Sum 的两种解决方案,我注意到 n^2 解决方案基本上是测试两个数字的所有组合,看看它们是否总和为 Target。
我理解天真的解决方案遍历数组的每个元素(或更准确地说是 n-1 次,因为我们无法将最后一个元素与自身进行比较)以获取第一个加数,然后另一个循环来获取以下所有内容元素。第二个循环需要迭代 n-1-i 次,其中 i 是第一个加数的索引。我可以看到 (n-1)(n-1-i) 是 O(n^2)。
当我在谷歌上搜索“查找组合的算法”时,问题就出现了,它导致this 线程,其中接受的答案谈到格雷码,这超出了我的想象。
现在我不确定我的假设是否正确,天真的解决方案是格雷码的一个版本,或者其他什么。
如果两个和是一个组合问题,那么它的时间复杂度将是 O(n!/ ((nk)!k!)) 或 O(nCk) 但我看不出它是如何减少到 O(n^2 )
【问题讨论】:
标签: algorithm