人们会互相发送好友请求,现在给定一个包含有他们年龄的数组,ages[i]
表示第 i 个人的年龄。
当满足以下条件时,A 不能给 B(A、B不为同一人)发送好友请求:
age[B] <= 0.5 * age[A] + 7
age[B] > age[A]
age[B] > 100 && age[A] < 100
否则,A 可以给 B 发送好友请求。
注意如果 A 向 B 发出了请求,不等于 B 接受了 A 的请求。而且,人们不会给自己发送好友请求。
求总共会发出多少份好友请求?
示例 1:
输入: [16,16] 输出: 2 解释: 二人可以互发好友申请。
示例 2:
输入: [16,17,18] 输出: 2 解释: 好友请求可产生于 17 -> 16, 18 -> 17.
示例 3:
输入: [20,30,100,110,120] 输出: 3 解释: 好友请求可产生于 110 -> 100, 120 -> 110, 120 -> 100.
说明:
1 <= ages.length <= 20000
.1 <= ages[i] <= 120
.
Review: 我们把 0-120年龄有多少人放到一个int[121]数组里
这样数组的下标为年龄,存的值为该下标年龄的人数
然后根据题所给出的条件来取下标(年龄)范围内的人数,然后累加即可
注意要刨除自己(不能给自己发请求)
ps:出这个题的人这个条件出的恐怕是个弱智
Code:
public int numFriendRequests(int[] ages) {
int[] record = new int[121];
for (int age : ages) {
record[age]++;
}
int res =0;
for (int i = 15; i < 121; i++) {
int p = 0;
if (record[i]!=0){
int l = (i>>1)+7;
if (l<0) l=0;
for (int j= l + 1; j < i+1; j++) {
p += record[j];
}
p=p*record[i]-record[i];
res+=p;
}
}
return res;
}