题解-100统计班级中的说谎者

101 阅读2分钟

问题描述

在小C的班级里,有 N 个学生,每个学生的成绩是 A_i。小C发现了一件有趣的事:当且仅当某个学生的成绩小于或等于自己的有更多人时,这个学生会说谎。换句话说,如果分数小于等于他的学生数量大于比他分数高的学生数量,则他会说谎。

现在,小C想知道班里有多少个学生会说谎。

解题思路

这是一道简单题,通过题目描述中的一半,大于小于等字眼,我很快想到了利用中位数解题,在计算中位数之前,对特殊的len长度进行处理,然后根据len为奇偶不同的情况,分别计算中位数,遍历所有数,不小于中位数的成绩的学生都是说谎者。

AI解题体验

有了解题思路后,我先把题目复制给了AI,验证它是否会和我的思路一致,但是豆包没有想到中位数的想法,直接调了python中封装好的包,一步求出了结果count = bisect.bisect_right(B, score)。bisect_right 是 Python 标准库 bisect 模块中的一个函数,用于在排序列表中找到插入位置,使得插入后列表仍然保持有序。具体来说,bisect_right 返回的是插入位置的索引,该位置是第一个大于 x 的元素的位置。 bisect_right 使用二分查找算法来高效地找到插入位置。

代码

def solution(A):
    B=sorted(A)
    if len(A)<=1:
        return len(A)
    if len(A)%2!=0:
        median=B[int(len(A)/2)]
    else:
        median=(B[len(A)//2-1]+B[len(A)//2])/2
    res=0
    for i in B:
        if i>=median:
        res+=1
    return res

学习计划

在训练营整个过程中,我会利用每天的午休时间(大约1h)解一道题,拿到题目后,我首先会自己模拟解题,利用自己的过往经验,将题目拆解为某个类型固定解题,有了成熟和有把握的思路后,我会交给界面旁边的AI帮我完善思路,有时AI会写出与我思路一致的代码,也有和这道题情况一样,它自己直接调包实现,虽然我更希望它像我一样,不直接调包,因为一般调包会增加解题的时间复杂度,然后我会根据AI的代码,梳理自己的代码逻辑,运行和Debug,AI刷题界面和本地一样方便,我认为比leetcode界面更方便,因为可以控制输入输出的逻辑。