题目描述:
本题的题目要求中第三个式子条件因为包含在第二个式子中,所以该式子可以省略掉,对于式子二:
age[y] > age[x]
我们可以用一个快排来解决,这样始终满足后面元素向前发出好友请求,再结合式子一进行判断即可。
本题可以采用双指针方法来避免两次循环的时间复杂度,还有一点就是同龄人之间是可以相互发送的,对于这个条件我们可以用一个同龄计数器来记录有多少连续的同龄人,在最终计数器中添加进同龄计数器中的数字即可(注意在迭代中及时将同龄计数器归零否则会出现错误)
完整代码如下:
int numFriendRequests(vector<int>& ages) {
sort(ages.begin(),ages.end());
int i=0,num=0,j=1,num_1=0;
while(i<=ages.size()-1&&j<=ages.size()-1){
if(ages[j-1]!=ages[j])num_1=0;//如果不同龄则将同龄计数器归零
if(ages[i]<=0.5*ages[j]+7){
if(j-i>1){
i++;
}
else{
i++;
j++;
}
continue;
}
else{
if(ages[j-1]==ages[j]){//判断是否同龄
num_1++;
num+=num_1;
}
else num_1=0;
num+=j-i;
j++;
}
}
return num;
}