<gouthampradhan>two_pointers_ThreeSum_1.java
public List<List<Integer>> threeSum(int[] nums) {
    List<List<Integer>> result = new ArrayList<>();
    if (nums.length < 3) return result;
    Arrays.sort(nums);
    for (int i = 0, l = nums.length; i < l - 2; i++) {
      if (i == 0 || nums[i] != nums[i - 1]) {
        int j = i + 1, k = l - 1;
        while (k > j) {
          if (j != i + 1 && nums[j] == nums[j - 1]) {
            j++;
            continue;
          }
          int sum = nums[i] + nums[j] + nums[k];
          if (sum == 0) {
            result.add(Arrays.asList(nums[i], nums[j], nums[k]));
            k--;
            j++;
          } else if (sum > 0) k--;
          else j++;
        }
      }
    }
    return result;
  }
public List < List < Integer >> var_2 ( int [ ] var_3 ) {
  List < List < Integer >> var_5 = new ArrayList < > ( ) ;
  if ( var_3 . length < 3 ) return var_5 ;
  Arrays . sort ( var_3 ) ;
  for ( int var_11 = 0 , var_12 = var_3 . length ;
  var_11 < var_12 - 2 ;
  var_11 ++ ) {
    if ( var_11 == 0 || var_3 [ var_11 ] != var_3 [ var_11 - 1 ] ) {
      int var_15 = var_11 + 1 , var_16 = var_12 - 1 ;
      while ( var_16 > var_15 ) {
        if ( var_15 != var_11 + 1 && var_3 [ var_15 ] == var_3 [ var_15 - 1 ] ) {
          var_15 ++ ;
          continue ;
        }
        int var_17 = var_3 [ var_11 ] + var_3 [ var_15 ] + var_3 [ var_16 ] ;
        if ( var_17 == 0 ) {
          var_5 . add ( Arrays . asList ( var_3 [ var_11 ] , var_3 [ var_15 ] , var_3 [ var_16 ] ) ) ;
          var_16 -- ;
          var_15 ++ ;
        }
        else if ( var_17 > 0 ) var_16 -- ;
        else var_15 ++ ;
      }
    }
  }
  return var_5 ;
}
