Advertisement
1988coder

825. Friends Of Appropriate Ages

Nov 18th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.28 KB | None | 0 0
  1. /*
  2. Time Complexity: O(n + maxAge)
  3. Space Complexity: O(maxAge)
  4.  
  5. (B <= A/2 + 7) & (B > A) ==> (A <= A/2+7) ==> A <= 14 .. for these ages of A its not valid.
  6. */
  7. class Solution {
  8.     public int numFriendRequests(int[] ages) {
  9.         if (ages == null || ages.length == 0) {
  10.             return 0;
  11.         }
  12.         int minAge = Integer.MAX_VALUE;
  13.         int maxAge = 0;
  14.         HashMap<Integer, Integer> counts = new HashMap<>();
  15.         for (int age : ages) {
  16.             minAge = Math.min(minAge, age);
  17.             maxAge = Math.max(maxAge, age);
  18.             counts.put(age, counts.getOrDefault(age, 0)+1);
  19.         }
  20.         // (B <= A/2 + 7) & (B > A) ==> (A <= A/2+7) ==> A <= 14 .. for these ages of A its not valid.
  21.         if (maxAge < 15) {
  22.             return 0;
  23.         }
  24.         minAge = Math.max(minAge, 15);
  25.         int[] prefixSum = new int[maxAge+1];
  26.  
  27.         int result = 0;
  28.         for (int i = minAge; i <= maxAge; i++) {
  29.             prefixSum[i] = prefixSum[i-1];
  30.             if (!counts.containsKey(i)) {
  31.                 continue;
  32.             }
  33.             int count = counts.get(i);
  34.             prefixSum[i] += count;
  35.             result += (prefixSum[i] - prefixSum[(int)(i*0.5+7)] - 1) * count;
  36.         }
  37.         return result;
  38.     }
  39. }
  40.  
  41.  
  42. /*
  43. Time Complexity: O(n + 121)
  44. Space Complexity: O(121)
  45. */
  46. // class Solution {
  47. //     public int numFriendRequests(int[] ages) {
  48. //         if (ages == null || ages.length == 0) {
  49. //             return 0;
  50. //         }
  51. //         // int minAge = 120;
  52. //         // int maxAge = 15;
  53. //         int[] counts = new int[121];
  54. //         int[] prefixSum = new int[121];
  55. //         for (int age : ages) {
  56. //             // minAge = Math.min(minAge, age);
  57. //             // maxAge = Math.max(maxAge, age);
  58. //             counts[age]++;
  59. //         }
  60.        
  61. //         // if (minAge < 15) {
  62. //         //     minAge = 15;
  63. //         // }
  64. //         int result = 0;
  65. //         // for (int i = minAge; i <= maxAge; i++) {
  66. //         for (int i = 15; i <= 120; i++) {
  67. //             prefixSum[i] = prefixSum[i-1] + counts[i];
  68. //             if (counts[i] > 0) {
  69. //                 result += (prefixSum[i] - prefixSum[(int)(i*0.5+7)] - 1) * counts[i];
  70. //             }
  71. //         }
  72. //         return result;
  73. //     }
  74. // }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement