假设你有整数的任意列表,并返回True
如果在总计为0替代的解决方案
我的列表中存在一对能够产生n * log(n)复杂度的解决方案。这里有一个简短的草图(虽然有一个更简单的方法,见下文):
- 排序数组。设置一个指向第一个元素的指针。
- 调查指针的元素(首先调用它)和元素在数组的对面(最后调用它)。如果第一个元素的大小大于最后一个元素的大小,请删除第一个元素并将指针移至最后一个元素。否则开始遍历数组向后寻找(可能的)总和。
- 如果没有找到的总和,将指针指向下一个元素,并重复2
上面的解释并不重要。 显然还有另一种使用字典的解决方案。有人可以启发我吗?
不回答你的问题,但N *日志的一个简化版本(n)的算法是:1排序数组绝对值; 2.遍历数组,检查'a [i] == -a [i + 1]' – 2013-03-13 15:11:15