[LeetCode每日一题] | 825.适龄的朋友

Tips:该专栏的题解整理在https://github.com/dzw001/leetcode_notebook,有需要的童鞋自取哦~

题目链接

https://leetcode-cn.com/problems/friends-of-appropriate-ages/

题目描述

题目难度:中等

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

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

  • age[y] <= 0.5 * age[x] + 7
  • age[y] > age[x]
  • age[y] > 100 && age[x] < 100

否则,x将会向 y发送一条好友请求。

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

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

解题思路

打表法,思路上比较简洁的一种方法。由于官方给定了每个人的年龄范围是 1 ~ 120 之间,因此可以先统计出每个年龄的人数,然后对于其中的任意一个年龄 x,计算出其 会发送交友请求的年龄范围 ,然后计算这个年龄范围内的人数之和 n,则 x * (n - 1)即为所有 年龄为 x的人 所发出的好友请求的总数。

之所以减一是因为根据题目中的限制条件可以算出,年龄相同的人 也在交友范围内,因此 自己 也在交友范围内,但自己是不能向自己发出好友请求的。

# Python3
class Solution:
    def numFriendRequests(self, ages: List[int]) -> int:
        request_num = 0
        record = [0] * 121
        for age in ages:
            record[age] += 1
        for i in range(1, 121):
            # 计算年龄为 i 的用户的交友年龄上下界
            min_age = i / 2 + 7
            if int(min_age) == min_age:
                min_age += 1
            else:
                min_age += 0.5
            max_age = i
            # 计算年龄为 i 的用户总共能产生的请求数量
            if min_age > max_age:
                continue
            request_num += record[i] * (sum(record[int(min_age): max_age + 1]) - 1)
        return request_num
 max_age + 1]) - 1)
        return request_num
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王大梨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值