春招打卡d13n22-leetcode刷题825适龄的朋友

145 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

leetcode刷题825适龄的朋友

前文

本位为leetcode数组类型问题,题目序号为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 发送一条好友请求。另外,用户不会向自己发送好友请求。

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

解题思路

根据题目信息来说,本题目属于数组操作类型的问题。由于判断好友条件中有年龄比较的内容,因此我们事先进行一次年龄数组的排序。在排序结果中,我们利用循环操作进行处理。当外层到达某一元素后,内层向后查找并进行条件比较。如果遇到满足条件的元素,则认为是发送了好友请求,将记录数据进行加一操作。而有一点需要注意的是,由于可能出现二者年龄相同的情况,因此内部逻辑还要增加相等条件的反向好友操作。按此方式执行,即可得到应发送的全部好友请求,将其返回就是改题目的答案。

解题代码

public int numFriendRequests(int[] ages) {
    ages = Arrays.stream(ages).sorted().toArray();
    int cnt = 0;
    for (int i = 0; i < ages.length - 1; i++) {
        int j = i + 1;
        while (j <= ages.length - 1 && ages[i] > 0.5 * ages[j] + 7 && !(ages[i] > 100 && ages[j] < 100)){
            if(ages[i] == ages[j] && ages[j] > 0.5 * ages[i] + 7 && !(ages[j] > 100 && ages[i] < 100)){
                cnt++;
            }
            cnt++;
            j++;
        }
    }
    return cnt;
}

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。