【刷题】三数之和

37 阅读1分钟

这道题目参考答案给出的O(n2)O(n^2)的解法,比较直观。

但是我纠结是否可以用O(nlog(n))O(nlog(n))的解法。

例如一个排序好的数组[-4,-1,-1,0,1,2,2,3]

head指向0,tail指向n-1,通过二分找到满足条件的数。
while目标数字的索引小于等于headhead += 1
while目标数字的索引大于等于tailtail += 1

这时出现了一个问题,如果等于怎么办,等于了把这个加进答案,接下来移动head还是移动tail。都有可能。例如

[-4,-1,-1,0,1,2,2,3]
  ⬆         ⬆     ⬆
如果选择head右移,那么就错过了-4,2,2这个解
tail左移同理

所以这种方法无法解决这类问题。这种方法可以用来做请找出三树之和的其中一个解。