解题思路:
一道典型的前缀和题目,首先统计每个年龄的人数,由于限定了上限,直接定义大小为121的vector的容器。由于固定y后,满足条件的x是个范围,那么范围内的x都满足,所以构建前缀和数组,再根据范围计算可以发送的好有请求数。代码如下:
class Solution {
public:
int numFriendRequests(vector<int>& ages) {
vector<int> count(121, 0);
vector<int> pre(121, 0);
for(int& age : ages) {
count[age] ++;
}
for(int i = 1; i <= 120; i ++) {
pre[i] = pre[i - 1] + count[i];
}
int ans = 0;
for(int i = 15; i <= 120; i ++) {
if(count[i]) {
int bound = 0.5 * i + 8;
ans += count[i] * (pre[i] - pre[bound - 1] - 1);
}
}
return ans;
}
};