825. 适龄的朋友

52 阅读1分钟

题目链接

leetcode.cn/problems/fr…

思路

前缀和,注意到年龄的范围是1-120,于是我们可以把各个年龄的人数统计起来,然后用前缀和快速找出范围在[down-up]之间的人数,加到ans上。

代码

class Solution {
public:
    int numFriendRequests(vector<int>& ages) {
        int n=ages.size();
        int ans=0;
        vector<int>cnt(121,0);
        for(int i=0;i<n;i++){
            cnt[ages[i]]++;
        }

        vector<int>sum(122,0);
        for(int i=1;i<=120;i++){
            sum[i]=sum[i-1]+cnt[i];
        }


        for(int i=0;i<n;i++){
            int up=ages[i];
            int down=0.5*ages[i]+7;
            
            //不符合要求直接跳过
           if(down>up)continue;
           if(sum[up]-sum[down]<=0)continue;
           
           //注意要减去自己
            ans+=sum[up]-sum[down]-1;
            cout<<ans<<endl;
        }

        return ans;
    }
};