825. 适龄的朋友

人们会互相发送好友请求,现在给定一个包含有他们年龄的数组,ages[i] 表示第 i 个人的年龄。

当满足以下条件时,A 不能给 B(A、B不为同一人)发送好友请求:

  • age[B] <= 0.5 * age[A] + 7
  • age[B] > age[A]
  • age[B] > 100 && age[A] < 100

否则,A 可以给 B 发送好友请求。

注意如果 A 向 B 发出了请求,不等于 B 接受了 A 的请求。而且,人们不会给自己发送好友请求。 

求总共会发出多少份好友请求?

示例 1:

输入: [16,16]
输出: 2
解释: 二人可以互发好友申请。

示例 2:

输入: [16,17,18]
输出: 2
解释: 好友请求可产生于 17 -> 16, 18 -> 17.

示例 3:

输入: [20,30,100,110,120]
输出: 3
解释: 好友请求可产生于 110 -> 100, 120 -> 110, 120 -> 100.

说明:

  • 1 <= ages.length <= 20000.
  • 1 <= ages[i] <= 120.

Review: 我们把 0-120年龄有多少人放到一个int[121]数组里

这样数组的下标为年龄,存的值为该下标年龄的人数

然后根据题所给出的条件来取下标(年龄)范围内的人数,然后累加即可

注意要刨除自己(不能给自己发请求)

ps:出这个题的人这个条件出的恐怕是个弱智


Code:

    public int numFriendRequests(int[] ages) {
        int[] record = new int[121];
        for (int age : ages) {
            record[age]++;
        }
        int res =0;
        for (int i = 15; i < 121; i++) {
            int p = 0;
            if (record[i]!=0){
                int l = (i>>1)+7;
                if (l<0) l=0;
                for (int j= l + 1; j < i+1; j++) {
                    p += record[j];
                }
                p=p*record[i]-record[i];
                res+=p;
            }
        }
        return res;
    }

猜你喜欢

转载自blog.csdn.net/start_lie/article/details/88580829