fork download
  1. import java.util.*;
  2. class TripletsToZero{
  3. public static void main(String[]args){
  4. //[-2,-2,4] [-2,-1,3] [-2,0,2] [-2,1,1] [-1,-1,2] [-1,0,1] [0,0,0]
  5. printTriplets(new int[] {-2, -2, -1, -1, -1, -1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 4});
  6. System.out.println();
  7. //[-4,-2,6] [-4,0,4] [-4,1,3] [-4,2,2] [-2,-2,4] [-2,0,2]
  8. printTriplets(new int[] {-4,-2,-2,-2,0,1,2,2,2,3,3,4,4,6,6});
  9. }
  10. private static void printTriplets(int[] arr){
  11. Arrays.sort(arr);
  12. int nonNegStartIdx = findNonNegStartIdx(arr);
  13. if (nonNegStartIdx < 1) return;
  14.  
  15. for(int i = 0; i <= nonNegStartIdx;){
  16. for(int j = i+1, k = arr.length-1; j < k && k >= nonNegStartIdx;){
  17. int sum = arr[i]+arr[j]+arr[k];
  18. if (sum < 0){
  19. ++j;
  20. continue;
  21. } else if (sum > 0){
  22. --k;
  23. continue;
  24. } else {
  25. System.out.printf("[%d,%d,%d]\n", arr[i], arr[j], arr[k]);
  26. for(--k; k >= nonNegStartIdx && arr[k+1] == arr[k]; --k);
  27. for(++j; j < k && arr[j-1] == arr[j]; ++j);
  28. }
  29. }
  30. for(++i; i <= nonNegStartIdx && arr[i]==arr[i-1]; ++i);
  31. }
  32. }
  33. private static int findNonNegStartIdx(int[]arr){
  34. for(int i = 0; i < arr.length; ++i){
  35. if (arr[i] >= 0) return i;
  36. }
  37. return -1;
  38. }
  39. }
Success #stdin #stdout 0.1s 320320KB
stdin
Standard input is empty
stdout
[-2,-2,4]
[-2,-1,3]
[-2,0,2]
[-2,1,1]
[-1,-1,2]
[-1,0,1]
[0,0,0]

[-4,-2,6]
[-4,0,4]
[-4,1,3]
[-4,2,2]
[-2,-2,4]
[-2,0,2]