Skip to content

Latest commit

 

History

History

825

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Some people will make friend requests. The list of their ages is given and ages[i] is the age of the ith person. 

Person A will NOT friend request person B (B != A) if any of the following conditions are true:

  • age[B] <= 0.5 * age[A] + 7
  • age[B] > age[A]
  • age[B] > 100 && age[A] < 100

Otherwise, A will friend request B.

Note that if A requests B, B does not necessarily request A.  Also, people will not friend request themselves.

How many total friend requests are made?

Example 1:

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

Example 2:

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

Example 3:

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

 

Notes:

  • 1 <= ages.length <= 20000.
  • 1 <= ages[i] <= 120.

Companies:
Facebook

Related Topics:
Array

Solution 1.

// OJ: https://leetcode.com/problems/friends-of-appropriate-ages/
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(1)
class Solution {
private:
    bool request(int A, int B) {
        return !(B <= .5 * A + 7 || B > A);
    }
public:
    int numFriendRequests(vector<int>& ages) {
        int ans = 0;
        vector<int> cnts(120, 0);
        for (int age : ages) cnts[age - 1]++;
        for (int i = 0; i < 120; ++i) {
            if (!cnts[i]) continue;
            for (int j = 0; j < 120; ++j) {
                if (!cnts[j] || !request(i + 1, j + 1)) continue;
                ans += cnts[i] * cnts[j];
                if (i == j) ans -= cnts[i];
            }
        }
        return ans;
    }
};