[leetcode] 15.三數之和
阿新 • • 發佈:2019-01-26
三數之和
給定一個包含 n 個整數的陣列 nums
,判斷 nums
中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4], 滿足要求的三元組集合為: [ [-1, 0, 1], [-1, -1, 2] ]
具體思路:控制一個作為遍歷的輸,去計算另外兩個數。從最左邊的數開始遍歷,比較i+1到nums.length-1的數。遇到重複的數則通過比較過濾掉。
class Solution { public List<List<Integer>> threeSum(int[] nums) { Arrays.sort(nums); List<List<Integer>> result = new LinkedList<>(); if(nums!=null && nums.length>2){ for(int i=0;i<nums.length-2;){ int j = i+1; int k = nums.length - 1; while(j<k){ if(nums[j] + nums[k] == -nums[i]){ List<Integer> list = new LinkedList<>(); list.add(nums[i]); list.add(nums[j]); list.add(nums[k]); result.add(list); j++; k--; while(j<k&&nums[j]==nums[j-1]){ j++; } while(j<k&&nums[k]==nums[k+1]){ k--; } }else if(nums[j] + nums[k] > -nums[i]){ k--; while(j<k&&nums[k]==nums[k+1]){ k--; } }else{ j++; while(j<k&&nums[j]==nums[j-1]){ j++; } } } i++; while(i<nums.length-2&&nums[i]==nums[i-1]){ i++; } } } return result; } }