Welcome to Subscribe On Youtube

825. Friends Of Appropriate Ages

Description

There are n persons on a social media website. You are given an integer array ages where ages[i] is the age of the ith person.

A Person x will not send a friend request to a person y (x != y) if any of the following conditions is true:

  • age[y] <= 0.5 * age[x] + 7
  • age[y] > age[x]
  • age[y] > 100 && age[x] < 100

Otherwise, x will send a friend request to y.

Note that if x sends a request to y, y will not necessarily send a request to x. Also, a person will not send a friend request to themself.

Return the total number of friend requests made.

 

Example 1:

Input: ages = [16,16]
Output: 2
Explanation: 2 people friend request each other.

Example 2:

Input: ages = [16,17,18]
Output: 2
Explanation: Friend requests are made 17 -> 16, 18 -> 17.

Example 3:

Input: ages = [20,30,100,110,120]
Output: 3
Explanation: Friend requests are made 110 -> 100, 120 -> 110, 120 -> 100.

 

Constraints:

  • n == ages.length
  • 1 <= n <= 2 * 104
  • 1 <= ages[i] <= 120

Solutions

  • class Solution {
        public int numFriendRequests(int[] ages) {
            int[] counter = new int[121];
            for (int age : ages) {
                ++counter[age];
            }
            int ans = 0;
            for (int i = 1; i < 121; ++i) {
                int n1 = counter[i];
                for (int j = 1; j < 121; ++j) {
                    int n2 = counter[j];
                    if (!(j <= 0.5 * i + 7 || j > i || (j > 100 && i < 100))) {
                        ans += n1 * n2;
                        if (i == j) {
                            ans -= n2;
                        }
                    }
                }
            }
            return ans;
        }
    }
    
  • class Solution {
    public:
        int numFriendRequests(vector<int>& ages) {
            vector<int> counter(121);
            for (int age : ages) ++counter[age];
            int ans = 0;
            for (int i = 1; i < 121; ++i) {
                int n1 = counter[i];
                for (int j = 1; j < 121; ++j) {
                    int n2 = counter[j];
                    if (!(j <= 0.5 * i + 7 || j > i || (j > 100 && i < 100))) {
                        ans += n1 * n2;
                        if (i == j) ans -= n2;
                    }
                }
            }
            return ans;
        }
    };
    
  • class Solution:
        def numFriendRequests(self, ages: List[int]) -> int:
            counter = Counter(ages)
            ans = 0
            for i in range(1, 121):
                n1 = counter[i]
                for j in range(1, 121):
                    n2 = counter[j]
                    if not (j <= 0.5 * i + 7 or j > i or (j > 100 and i < 100)):
                        ans += n1 * n2
                        if i == j:
                            ans -= n2
            return ans
    
    
  • func numFriendRequests(ages []int) int {
    	counter := make([]int, 121)
    	for _, age := range ages {
    		counter[age]++
    	}
    	ans := 0
    	for i := 1; i < 121; i++ {
    		n1 := counter[i]
    		for j := 1; j < 121; j++ {
    			n2 := counter[j]
    			if !(j <= i/2+7 || j > i || (j > 100 && i < 100)) {
    				ans += n1 * n2
    				if i == j {
    					ans -= n2
    				}
    			}
    		}
    	}
    	return ans
    }
    
  • function numFriendRequests(ages: number[]): number {
        const m = 121;
        const cnt = Array(m).fill(0);
        for (const x of ages) {
            cnt[x]++;
        }
    
        let ans = 0;
        for (let ax = 0; ax < m; ax++) {
            for (let ay = 0; ay < m; ay++) {
                if (ay <= 0.5 * ax + 7 || ay > ax || (ay > 100 && ax < 100)) {
                    continue;
                }
                ans += cnt[ax] * (cnt[ay] - (ax === ay ? 1 : 0));
            }
        }
    
        return ans;
    }
    
    

All Problems

All Solutions