825. 适龄的朋友

在社交媒体网站上有 n 个用户。给你一个整数数组 ages ,其中 ages[i] 是第 i 个用户的年龄。

如果下述任意一个条件为真,那么用户 x 将不会向用户 y(x != y)发送好友请求:

ages[y] <= 0.5 * ages[x] + 7
ages[y] > ages[x]
ages[y] > 100 && ages[x] < 100
否则,x 将会向 y 发送一条好友请求。

注意,如果 x 向 y 发送一条好友请求,y 不必也向 x 发送一条好友请求。另外,用户不会向自己发送好友请求。

返回在该社交媒体网站上产生的好友请求总数。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/friends-of-appropriate-ages
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

计数 + 前缀和

class Solution {

    public int numFriendRequests(int[] ages) {
        int[] cnt = new int[121];
        for (int age : ages) {
            cnt[age]++;
        }
        int[] sum = new int[121];
        for (int i = 1; i <= 120; ++i) {
            sum[i] = cnt[i] + sum[i - 1];
        }
        int ans = 0;
        for (int i = 1; i <= 120; ++i) {
            if (cnt[i] > 0) {
                int j = (int) (0.5 * i + 8);
                if (j <= i) {
                    ans += cnt[i] * (sum[i] - sum[j - 1] - 1);
                }
            }
        }
        return ans;
    }
}

排序 + 双指针

import java.util.Arrays;

class Solution {

    /**
     * 0.5 * ages[x] + 7  < ages[y] <= ages[x]
     */
    public int numFriendRequests(int[] ages) {
        Arrays.sort(ages);
        int ans = 0;
        int i = 0, j = 0;
        for (int age : ages) {
            if (age < 15) {
                continue;
            }
            while (j < ages.length && ages[j] <= 0.5 * age + 7) {
                j++;
            }
            while (i + 1 < ages.length && ages[i + 1] <= age) {
                i++;
            }
            ans += i - j;
        }
        return ans;
    }
}
posted @   Tianyiya  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示