Problem: 825. Friends Of Appropriate Ages 适龄的朋友
解题过程
双指针,相同年龄可以相互发送,所以二分查找拿到>ages[y]的索引,相减*2;然后就是满足条件的,ages[x] < (( ages[y] - 7 ) << 1);,二分查找拿到>=的索引ind,ind-x就是可用区间,不满足条件的直接跳过
Code
class Solution { public: int numFriendRequests(vector<int>& ages) { sort(ages.begin(), ages.end()); int n = ages.size(), y = 0, x = 1, sum = 0, ind, a; while( y < n - 1 ) { if( ages[x] * 0.5 + 7.0 >= ages[y] ) { y++; x = y + 1; } else { ind = upper_bound(ages.begin(), ages.end(), ages[y]) - ages.begin(); if(ind - y > 0) { sum += (ind - y - 1) * 2; } x = ind; a = (( ages[y] - 7 ) << 1); ind = lower_bound(ages.begin(), ages.end(), a) - ages.begin(); if(ind - x > 0) { sum += ind - x; } y++; x = y+1; } } return sum; // (y-7)*2 > x >= y && (y<=100||x>=100) } };