# 825. Friends Of Appropriate Ages

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`.

1. B的年龄小于等于A的年龄的一半加7。

2. B的年龄大于A的年龄。

3. B大于100岁，且A小于100岁。

``````class Solution {
public:
int numFriendRequests(vector<int>& ages) {
int res = 0, n = ages.size();
sort(ages.begin(), ages.end());
for (int i = n - 1; i >= 1; --i) {
for (int j = i - 1; j >= 0; --j) {
if (ages[j] <= 0.5 * ages[i] + 7) continue;
if (ages[i] == ages[j]) ++res;
++res;
}
}
return res;
}
};
``````

``````class Solution {
public:
int numFriendRequests(vector<int>& ages) {
int res = 0;
vector<int> numInAge(121), sumInAge(121);
for (int age : ages) ++numInAge[age];
for (int i = 1; i <= 120; ++i) {
sumInAge[i] = numInAge[i] + sumInAge[i - 1];
}
for (int i = 15; i <= 120; ++i) {
if (numInAge[i] == 0) continue;
int cnt = sumInAge[i] - sumInAge[i * 0.5 + 7];
res += cnt * numInAge[i] - numInAge[i];
}
return res;
}
};
``````

https://leetcode.com/problems/friends-of-appropriate-ages/

https://leetcode.com/problems/friends-of-appropriate-ages/discuss/127341/10ms-concise-Java-solution-O(n)-time-and-O(1)-space

LeetCode All in One 题目讲解汇总(持续更新中…)

 微信打赏 Venmo 打赏
（欢迎加入博主的知识星球，博主将及时答疑解惑，并分享刷题经验与总结，试运营期间前五十位可享受半价优惠～）

×

Help us with donation