题目:
题解:
代码如下:
class Solution {
public:
/*
这题目意思真难懂:若想x给y发消息,则必然三个条件都不成立,由于条件2包含条件3了,所以条件2不成立,条件3必然不成立,因此我们仅需条件1和条件2同时不成立即可,也就是 0.5*x+7<y<=x,由 x>0.5x+7 => x>14,所以x<=14的不用考虑了。由于x递增时,区间(0.5*x+7,x]也是单调递增的,所以我们可以将数组排序,然后利用双指针寻找满足条件y的范围即可。
*/
int numFriendRequests(vector<int>& a) {
int n=a.size();
sort(a.begin(),a.end());
int l=0,r=0,res=0;
for(int x:a)
{
if(x<=14)continue;
// 左边界寻找大于0.5*x+7的起点
while(a[l]<=0.5*x+7)l++;
// 右边界寻找刚好小于等于x的位置,若a[r+1]>x,说明r+1超过边界了,而r刚好为边界
while(r+1<n&&a[r+1]<=x)r++;
res+=r-l;
}
return res;
}
};