给定一个包含 n 个整数的数组 nums判斷 nums 中是否存在三个元素 a,bc ,使得 a + b + c = 0 找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组
暴力法搜索的时间复杂度为 O(N^3),可通过双指针动态消去无效解来优化效率
双指针法铺垫: 先将给定 nums 排序,复杂度为 O(NlogN)
双指针法思路: 固定 3 个指针中最左(最小)数字的指针 k,双指针 ij 分设在数组索引 (k, len(nums)) 两端,通过双指针交替向中间移动记录对于每个固定指针 k 的所有满足 nums[k] + nums[i] + nums[j] == 0 的 i, j 组合:
时间复杂度 O(N^2):其中固定指针k循环复杂度 O(N),双指针 ij 复杂度 O(N)。
空间复杂度 O(1):指针使用常数大小的额外空间