- 先排序;
- 固定一个数字,然后从左右两边开始查找和为该数的负数即可。
剪枝:
- 因为是排序的,如果第一个数字大于0,那么后面的也都大于0,他们三个数字的和不可能等于0
- 过滤掉重复的
if (i > 0 && num[i] == num[i - 1])
continue
- 过滤掉重复的
while (left < right && num[left] == num[left + 1])
left++;
while (left < right && num[right] == num[right - 1])
right--;