数组中的三个数的和为0?
思路:
1、首先想到的是遍历,三层遍历,复杂度O(n^3),肯定不是最好的方法;
2、优化:自己想了下,结合网上的方法,至少需要两次遍历
1)原理:数组中两个数的和为M,
先将数组排序,
利用两个游标j、k分别标识数组的最大/最小位置,一次遍历即可,复杂度O(n)。
if a[j] + a[k] < M
j++;
else if a[j] + a[k] > M
k--;
else
a[j]、a[k]即为所求。
2)3Sum问题可以根据1),第一次遍历取出一个数a[i],把复杂问题降维,
然后把问题转换成剩余数组中取两个数的和等于-a[i],复杂度为O(n^2)。
3)类似问题的处理思路:
排序。
将问题降维。