LeetCode每日一题

LeetCode每日一题:三数之和

2020-07-18  本文已影响0人  Patarw

代码实现:

   public  List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        ArrayList<List<Integer>> list = new ArrayList<>();
          for(int i = 0;i <= nums.length-3;i++){
              int left = i+1;
              int right = nums.length-1;  
              if(nums[i]>0){break;} //nums[i] > 0时就不需要再遍历了
              if(i>=1 && nums[i] == nums[i-1]) {continue;}
              while(left < right){
             int s = nums[i] + nums[left] + nums[right];
              if(s == 0 ){
                  list.add(Arrays.asList(nums[i],nums[left],nums[right]));
                  //接下来就是去重操作
                  while(nums[left] == nums[left + 1] && left < right-1){
                     left++;
                 }
                  while(nums[right] == nums[right - 1] && left+1 < right){
                     right--;
                 } 
                left++;
                 right--;
              }else if(s < 0){left++;}
              else if(s > 0){right--;}
            }
          }
          return list;
       }
上一篇 下一篇

猜你喜欢

热点阅读