给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。
class Solution { public List<List<Integer>> threeSum(int[] nums) { //时间复杂度O(n^2) List<List<Integer>> res = new ArrayList<List<Integer>>(); int p,q,k; if(nums.length < 3) return res; //先排序 Arrays.sort(nums, 0, nums.length); for(p = 0;p < nums.length - 2; ++p){ //最外层定一个从左向右遍历 //另两个变量相互夹逼找结果 if(p - 1 >= 0 && nums[p] == nums[p - 1]) continue; q = nums.length - 1; k = p + 1; while(k < q){ if(nums[p] + nums[q] + nums[k] > 0){ --q; while(q > p + 1 && nums[q] == nums[q + 1]) --q; }else{ if(nums[p] + nums[q] + nums[k] < 0){ ++k; while(k < q && nums[k] == nums[k - 1]) ++k; }else{ List<Integer> tmp = new ArrayList<Integer>(); tmp.add(nums[p]); tmp.add(nums[k]); tmp.add(nums[q]); res.add(tmp); ++k; --q; while(k < q && nums[k] == nums[k - 1]&& nums[q] == nums[q + 1]) ++k; } } } } return res; } }