一、题目
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
二、双指针法解析
首先对数组 nums 排序,然后 i 从0开始遍历数组,同时定义一个 left 在 i+1 位置,定义一个right 在数组末尾位置
令 sum = nums[i] + nums[left] + nums[right];
如果 nums[i] 大于0 则遍历结束:因为已经排过序,如果nums[i]>0,则sum一定大于0,所以遍历结束
如果 sum=0,则记录三元素
如果 sum>0,说明三元素和过大,则 right 指针左移
如果 sum<0,说明三元素和过小,则 left 指针右移
直到 left 和 right 相遇
三、代码