Friends Of Appropriate Ages

medium array counting two-pointers

Problem

Person x sends a request to person y (x != y) unless y.age <= 0.5*x.age + 7, y.age > x.age, or y.age > 100 and x.age < 100. Count the total number of friend requests.

Inputages = [16,17,18]
Output2
17 -> 16 and 18 -> 17 are the only valid requests.

def numFriendRequests(ages):
    count = [0] * 121
    for a in ages: count[a] += 1
    res = 0
    for a in range(1, 121):
        for b in range(1, 121):
            if b <= 0.5 * a + 7: continue
            if b > a: continue
            if b > 100 and a < 100: continue
            res += count[a] * count[b]
            if a == b: res -= count[a]
    return res
function numFriendRequests(ages) {
  const count = new Array(121).fill(0);
  for (const a of ages) count[a]++;
  let res = 0;
  for (let a = 1; a <= 120; a++) {
    for (let b = 1; b <= 120; b++) {
      if (b <= 0.5 * a + 7) continue;
      if (b > a) continue;
      if (b > 100 && a < 100) continue;
      res += count[a] * count[b];
      if (a === b) res -= count[a];
    }
  }
  return res;
}
class Solution {
  public int numFriendRequests(int[] ages) {
    int[] count = new int[121];
    for (int a : ages) count[a]++;
    int res = 0;
    for (int a = 1; a <= 120; a++) {
      for (int b = 1; b <= 120; b++) {
        if (b <= 0.5 * a + 7) continue;
        if (b > a) continue;
        if (b > 100 && a < 100) continue;
        res += count[a] * count[b];
        if (a == b) res -= count[a];
      }
    }
    return res;
  }
}
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
    int numFriendRequests(vector<int>& ages) {
        vector<int> count(121, 0);
        for (int a : ages) count[a]++;
        int res = 0;
        for (int a = 1; a <= 120; a++) {
            for (int b = 1; b <= 120; b++) {
                if (b <= 0.5 * a + 7) continue;
                if (b > a) continue;
                if (b > 100 && a < 100) continue;
                res += count[a] * count[b];
                if (a == b) res -= count[a];
            }
        }
        return res;
    }
};
Time: O(n + A^2) Space: O(A)