0
点赞
收藏
分享

微信扫一扫

lc15——三数之和(双指针法)

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>>a=new ArrayList<>();
Arrays.sort(nums);//排序,等下可以操作
for(int i=0;i<nums.length;i++)
{
 if(nums[i]>0)
 {
     return a;//如果最左边的数都大于0了,就没必要再往下进行了,因为后面的排序后都大于0
 }
  if(i>0&&nums[i]==nums[i-1])
  {
      continue;//这时候直接往右移就行了,进行下一步。
  }
  int left=i+1;
  int right=nums.length-1;
  while(right>left)
  { 
   int sum=nums[i]+nums[left]+nums[right];
   if(sum>0)//说明三数之和大了,right得往左移
   {
       right--;
   }else if(sum<0)
   {
       left++;
   }
   else{//这时候说明sum=0了,开始操作
   a.add(Arrays.asList(nums[i],nums[left],nums[right]));
   //这两步不容易想到,可以做笔记,下次注意
   while(right>left&&nums[right]==nums[right-1])
   {
       right--;
   }
   while(right>left&&nums[left]==nums[left+1])
   {
       left++;
   }
   //处理完上一个三元组后该为下一个三元组的处理做铺垫了
   right--;
   left++;
   }
  }
  }
return a;
   }

}
举报

相关推荐

0 条评论