leetcode 15. 三數之和(3Sum)
阿新 • • 發佈:2018-12-10
給定一個包含 n 個整數的陣列 nums
,判斷 nums
中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4], 滿足要求的三元組集合為: [ [-1, 0, 1], [-1, -1, 2] ]
思路:
這題可以使用雜湊表,我這裡沒用,用的算是三指標,從小到大排好後,當第一個指標都大於0了,那3個指標的值加起來不可能等於0了,此時break,為了不重複,最內層的while 實現了排重
class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> ans = new ArrayList<>(); Arrays.sort(nums); for(int k=0;k<nums.length - 1;k++) { if(nums[k]>0) break; if(k>0 && nums[k]==nums[k-1]) continue; int l = k+1; int r = nums.length - 1; int target = 0 - nums[k]; while(l<r) { List<Integer> list = new ArrayList<>(); while(l+1<r && nums[l+1]==nums[l]) l++; while(l+1<r && nums[r-1]==nums[r]) r--; if(nums[l] + nums[r] == target) { list.add(nums[k]); list.add(nums[l]); list.add(nums[r]); ans.add(list); l++; r--; } else if(nums[l] + nums[r] < target) l++; else r--; } } return ans; } }