写这篇科普的起因是最近看到一个很好玩的 b 站视频,大概是说自己刷到了力扣全国第二名,而全国第一名是「楼教主」,以此来说明自己实力非常强。
所以这里来科普一下力扣上各种能够看到的排名。
点开一个人的主页(比如我的 zerotrac),大致可以看到三个排名。
最上方有一个「全站排名」。这个排名是根据「通过的题目数量」唯一决定的。你在力扣平台上解决的问题数量越多,排名也就越高。上面的 b 站视频也说的是这个排名,但显然 (1) 这个排名可以靠疯狂提交正确代码刷上去 (2) 楼教主也不是第一,这里是楼教主的主页 ACRush。楼教主和力扣有很好的合作关系(比如这次力扣的秋季赛就是 pony.ai 联合主办的),之前的春季赛和秋季赛楼教主也来参加过,但考虑楼教主现在的地位,是显然不需要靠着力扣上的刷题数来给自己提高知名度什么的。。。
下方的「竞赛积分」tab 中有一个「全国排名」和「全球排名」,这个排名是根据「力扣的竞赛积分」唯一决定的。力扣的竞赛积分可以通过参加周赛和双周赛获得,每场比赛打得好就加分,打得不好就扣分。这个排名主要能够反映出用户的实战水平,比如是否能够在规定的时间内想出题目的算法并实现。由于力扣使用的是 ELO 规则,如果 A 比 B 的竞赛分高 400 分以上,那么就能说明 A 是可以碾压 B 的。
竞赛积分决定的排名是不太好刷上去的,因为在 ELO 规则中,会先给用户计算出一个期望排名,再根据用户在当场比赛中的真实排名与期望排名的关系进行加分或扣分,所以要想一直加分,必须真实排名越来越高,疯狂地打比赛只会让你的竞赛积分趋于稳定。当然可以通过一些作弊的方式去拿到与自己实力不符的排名,但这也是违反竞赛规则的。
左侧的「声望等级」则是你对力扣社区的贡献程度。这里没有具体的排名,但与 b 站类似给了一个 1-6 级的等级。声望计算的相关项在这里也显式地展现了,即「阅读」「点赞」「收藏」,所以写题解、写文章、发表评论之类的都可以增长声望。
其实这些排名都是玩一玩的,因为毕竟力扣是一个程序员面试/笔试导向的平台,而不是一个算法竞赛选手使用的刷题 oj。所以即使是「竞赛积分」也有很大的偏差,因为顶尖的算法竞赛选手根本不会来做力扣的周赛和双周赛。
目前参与度最高的算法竞赛平台是 codeforces,它也有竞赛积分系统。我在 codeforces 上的竞赛积分大概是 2200 多分,最高到过 2300 多分,排名约为世界 1200 名。而楼教主 ACRush 是 3047 分。
所以如果以后有人和你吹嘘他在力扣上的「全站排名」有多高或者「竞赛积分」排名有多高,或者拿楼教主碰瓷,你笑笑就好~要展现算法竞赛水平,请去 codeforces 打上 2600 分。