Advertisement
dorucriv

Triplets with Sum between given range

Apr 7th, 2020
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.61 KB | None | 0 0
  1. public class Solution {
  2.    
  3.     public double[] max3(ArrayList<Double> a, double min, double max) {
  4.         double[] m = new double[3];
  5.         for (int i = 0; i < a.size(); i++) {
  6.             if (a.get(i) < min || a.get(i) >= max)
  7.                 continue;
  8.             if (a.get(i) > m[0]) {
  9.                 m[2] = m[1];
  10.                 m[1] = m[0];
  11.                 m[0] = a.get(i);
  12.             } else if (a.get(i) > m[1]) {
  13.                 m[2] = m[1];
  14.                 m[1] = a.get(i);
  15.             } else if (a.get(i) > m[2]) {
  16.                 m[2] = a.get(i);
  17.             }
  18.         }
  19.         return m;
  20.     }
  21.    
  22.     public double[] min3(ArrayList<Double> a, double min, double max) {
  23.         double[] m = new double[3];
  24.         Arrays.fill(m, 2.);
  25.         for (int i = 0; i < a.size(); i++) {
  26.             if (a.get(i) < min || a.get(i) >= max)
  27.                 continue;
  28.             if (a.get(i) < m[0]) {
  29.                 m[2] = m[1];
  30.                 m[1] = m[0];
  31.                 m[0] = a.get(i);
  32.             } else if (a.get(i) < m[1]) {
  33.                 m[2] = m[1];
  34.                 m[1] = a.get(i);
  35.             } else if (a.get(i) < m[2]) {
  36.                 m[2] = a.get(i);
  37.             }
  38.         }
  39.         return m;
  40.     }
  41.    
  42.     public int solve(ArrayList<String> A) {
  43.         ArrayList<Double> a = new ArrayList<Double>(A.size());
  44.         for (int i = 0; i < A.size(); i++) {
  45.             double d = Double.parseDouble(A.get(i));
  46.             if (d > 0 && d < 2)
  47.                 a.add(d);
  48.         }
  49.          
  50.         // case A A A
  51.         double[] maxA = max3(a, 0, 2./3);
  52.         if (maxA[2] > 0 && maxA[0] + maxA[1] + maxA[2] > 1)
  53.             return 1;
  54.  
  55.         // case A A C
  56.         double[] minA = min3(a, 0, 2./3);
  57.         double[] minC = min3(a, 1, 2);
  58.         if (minA[0] + minA[1] + minC[0] < 2)
  59.             return 1;
  60.  
  61.         // case A B B
  62.         double[] minB = min3(a, 2./3, 1);
  63.         if (minA[0] + minB[0] + minB[1] < 2)
  64.             return 1;
  65.  
  66.         // case A B C
  67.         if (minA[0] + minB[0] + minC[0] < 2)
  68.             return 1;
  69.        
  70.         // case A1 A1 B
  71.         double[] maxA1 = max3(a, 0, 1./3);
  72.         double[] maxB = max3(a, 2./3, 1);
  73.         if (maxA1[1] > 0 && maxA1[0] + maxA1[1] + maxB[0] > 1)
  74.             return 1;
  75.        
  76.         // case A1 A2 B
  77.         double[] minA1 = min3(a, 0, 1./3);
  78.         double[] minA2 = min3(a, 1./3, 2./3);
  79.         if (minA1[0] + minA2[0] + minB[0] < 2)
  80.             return 1;
  81.        
  82.         // case A2 A2 B
  83.         if (minA2[0] + minA2[1] + minB[0] < 2)
  84.             return 1;
  85.        
  86.         return 0;
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement