题目描述

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

解题思路

双指针

image.png

注意这个题也是双指针,不过是两个指针一个从前面开始,一个从后面开始遍历

  1. public List<List<Integer>> threeSum(int[] nums) {
  2. List<List<Integer>> res = new ArrayList<>();
  3. Arrays.sort(nums);
  4. int len = nums.length;
  5. for(int i=0;i<len;i++){
  6. if(nums[i]>0)
  7. break;
  8. if(i!=0&&nums[i]==nums[i-1])
  9. continue;
  10. int L = i+1;
  11. int R = len-1;
  12. while (L<R){
  13. int sum = nums[i]+nums[L]+nums[R];
  14. if(sum==0){
  15. res.add(Arrays.asList(nums[i],nums[L],nums[R]));
  16. while(L<R&&nums[L+1]==nums[L]) L++;
  17. while(L<R&&nums[R-1]==nums[R]) R--;
  18. R--;
  19. L++;
  20. }else if(sum>0){
  21. R--;
  22. }else{
  23. L++;
  24. }
  25. }
  26. }
  27. return res;
  28. }