力扣高频算法php_在力扣杯中力压群雄是什么水平?

3168eef603443a32ee4a52cbd61e2ae2.png

经过激烈的角逐和比拼,由力扣与字节跳动联合主办的「LCCUP 力扣杯 2020 秋季编程大赛」圆满落幕,既有趣又奖励丰厚的力扣杯也成为了越来越多扣友们春秋招时的必备日程。

这一次我们邀请到了字节跳动图森未来乐鑫科技美团点评微软中国,为参赛者提供丰富的简历内推机会,同时也吸引了各路高手大神前来参赛。比赛虽已结束,但那些激动人心的冲刺和反转时刻仍历历在目,让我们一起来回顾一下本届力扣杯的盛况吧:

知乎视频​www.zhihu.com

你在本次力扣杯中收获满意的结果了吗?按照惯例,力扣君将带你一起复盘,查漏补缺。在这次的赛后分析报告中,我们不仅以数据的形式展现了此次参与者的基本情况,还挖掘出了一些有意思的行为数据,并邀请头部选手和企业进行了点评和分享

01 都有哪些参赛者?

本次力扣杯个人赛总报名人数为 8766 人,战队赛总报名队伍为 2575 队,共计 4305 人,平均每队有 1.67 人。

与春赛相似,此次秋赛的报名人数中个人赛和战队赛的在校生占比都超过了 60%,其中超过半数为 211(含 985)院校的学生

8995805942ed2c832cd8f9db272daca8.png

在校生参与者中,2021 年和 2022 年的应届及准应届生的占比过半。此外,2020 年及之前毕业的非在校生的人数也达到了近 40%。从性别分布上来看,本届力扣杯的个人赛和战队赛参赛者的男女比例基本呈现为 9:1

cf0680cb2240714844f5f11e92406280.png

站在企业的角度,他们更青睐具有什么样特质的候选人呢?

@字节跳动资深笔试出题人 Hunter

能力“优秀”的候选人,“优秀”有很多参考点:

1. 成绩,如果能在计算机相关专业本科排名前 5%,或者考研成绩排名前 5%,从过往经历看,这些同学专业课基本功有优势;

2. 工程,在大学或研究生阶段,参与过学校相关重要项目或者在一线公司实习过,实际积累了较多开发经验,这些同学也比较有优势;

3. 竞赛,有信息学竞赛经验,算法编码能力优秀并有获奖的同学普遍有很强的竞争力;如果没有信息学竞赛经验,但在其它像数学、物理、电子设计、数模竞赛中成绩突出的同学,也会受青睐;

4. 学术,在学校里,能够在核心和顶级学术期刊发表原创性学术/技术文章的同学,会非常有竞争力(对算法岗);

5. 好奇心和持续学习的能力。

@图森未来

聪明、有好奇心,自信且有很强自动驱动力的候选人。

@乐鑫科技

1. 有开放和分享精神的候选人。活跃在 Github 或技术博客类网站,会比较受到青睐,也更贴近公司价值观。

2. 对技术有热情,兴趣驱动的候选人。做技术研发有很多难关要攻克,我们将面对的都是未知的未来,兴趣和热情会带你走得更远,而且不会累。

3. 诚信正直的候选人。能自省,能正视自己的不足,并愿意向更优秀的人学习。

02 最热门的编程语言?

编程语言是程序员们比赛时的重要武器,你更倾向于用同一把武器打完整场比赛吗?

据统计,在本次力扣杯有过提交记录的参赛者中,个人赛和战队赛均有约 95% 的人比赛时选择了仅使用 1 种编程语言。而同场比赛同一人语言使用数量的最高纪录是 4 种,仅有一人

在这些被使用的语言中,本次个人赛和战队赛中最热门的前三种依次均为:C++、Java、Python3,与今年春赛的结果一致。

0133d362ee882246b8be3de0d44aee89.png

所以,程序员究竟需要掌握几种语言?看看大神们怎么说:

@zerotrac 力扣杯个人赛第一名

我会根据不同题目切换更合适答题的语言,比如 Python 适合做字符串处理的题目以及记忆化搜索的题目,API 很方便,其它类型的题目会用 C++ 来写。我认为一个合格的程序员至少要掌握两种语言,一门自己工作中用到的,另一门 Python 或者 Shell Script 让自己的工作变得更方便。如果工作语言就是 Python,建议学习一门非解释性语言(例如C++ 或 Java)。掌握一门语言指的是不会因为语法问题卡住,知道自己怎么去查阅资料。

@天塘 力扣杯个人赛第二名

不会切换语言,因为 Java 基本上是比较万金油的。我认为掌握一门语言就够了,掌握就是指熟练使用,能够用它白板编程。

@汪乐平 个人赛第三名

掌握的程度是能够在不看文档的情况下写出不使用外部库的程序。

对于这个问题,企业们又是怎么看的呢?

@字节跳动资深笔试出题人 Hunter

对应届生来说,能用一门语言快速准确表达完成自己的想法/算法是重要的考核标准;对于一个合格的技术候选人,最好能同时精通一门静态语言和一门动态语言,静态语言更接近计算机底层原理,动态语言便于我们简化一些开发流程提高效率;C++、Java、Python 和 Ruby 等等主流语言能深入两个以上更好。

掌握是指对语言的基础知识有扎实的理解,对语言的特性和深入细节有清晰的认识(比如 C++ 对象的内存布局,C++11 有哪些新特性,Python 中 yield 有什么作用,现代语言的内存回收机制),能够快速使用相关语言实现功能。

@图森未来

一般主要看掌握的语言方面与公司需求的匹配度,而不在于语言数量的多少,甚至说有时候数量太多反而是减分项,因为这大概率导致的效果是每个都不精。
在 Coding 面试中,需要比较快的想出解题思路,对语言特性熟悉,最终代码能够实现。

@乐鑫科技

不同行业公司对语言的要求不同,甚至同一公司不同岗位对语言要求也不同。

比如我们做物联网嵌入式开发就很重视 C 语言,岗位特别多,做应用时 Python 也很重要。我们内部也有 Java 或其他语言的需求,但那些岗位就比较少。不论你会哪一种,在职场上都会有机会出现。但在选择学习一门语言的时候,应当先了解你感兴趣的行业公司都重视使用哪一种语言,这样你做出的语言选择对你的职业规划就是有帮助的,而不是大家在学什么就学什么。

@微软中国

语言数量不重要,只有一个但真正精通,就足够了。

03 速度 vs 正确率?

比赛成绩是每个选手最为关心的信息。本次力扣杯个人赛共设置了 5 道题目,共计 25 分。据统计,个人赛的平均得分为 3.83 分,平均每人通过了 1.77 道题。其中共有 22 人获得了满分,在同为满分的成绩中,完赛时长最大相差了约 2 小时 40 分。

战队赛增设了 1 道题目,比赛时间也从 2 个半小时延长到了 3 个小时。满分为 37 分的战队赛中,参赛队伍的平均得分为 2.72 分。

每多完成一道题,排名将会有极大的跃升,那如果遇到做不出来的题,你是否会选择死磕到底?

@zerotrac 力扣杯个人赛第一名

不会,如果长时间想不出来说明自己累了/是自己几乎没有尝试过的做法/可能根本不会这个算法,那不如去看题解学习一下。

@汪乐平 个人赛第三名

不会,除非是最后一题。

做题的速度固然重要,但决定你的最终完赛时长的还有罚时。根据力扣杯的比赛规则,每提交一次错误解答,完赛时长将增加 5 分钟。因此,正确率也是不可忽视的一个因素,切不可为了速度而盲目提交。

本次力扣杯个人赛单人最多被罚时 22 次,共计 110 分钟,提交通过的参赛者中有 1726 人没有被罚时。而战队赛罚时最多的队伍共计 19 次, 95 分钟,提交通过的参赛者中有 158 队没有被罚时。

be2a5a5dec51049d0fff32a9a5ab2862.png

081bea743868f1095e5978e99c3bd6cc.png

*尝试率=提交用户数/参赛用户数

*通过率=通过用户数/提交用户数

所以比赛时,究竟是要有十成的把握才会提交答案,还是大胆试错呢?对此,大神的建议是:

@zerotrac 力扣杯个人赛第一名

如果这道题比较简单,并且写代码的时候比较流畅的话,我会倾向于通过所有测试数据之后就直接提交,因为在写代码以及思考的过程中,就已经把大部分条件都已经想明白了。但如果这道题本身比较难,写代码的时候磕磕绊绊,又调试了挺久的话,我会倾向于在测试数据之外,再自己构造一些测试数据测试一下,如果全通过了再进行提交。

而在正确率与速度的权衡间,企业认为:

@字节跳动资深笔试出题人 Hunter

如果题目比较简单,当然会选择时间短的,但正确率不能很差;如果问题较困难,思考的时间比较长,会倾向于正确率高的,考虑问题全面的。

@图森未来

更倾向于花费时间长,但罚时少的。因为我们希望在解题过程中,宁可多花一些时间思考,把题目做对,也不希望为了呈现效率,再花更多时间去修补,工作中也是这样。

@乐鑫科技

我们是做创新技术研发的公司,如果你耗时长,但能够想出更精妙的解决方案,会更有优势。作为公司,我们有长远的发展目标,是愿意且有耐心等待更好的解决方案的,也请各选手勿忘初心。

04 哪道题最难?哪道最有趣?

对于题目的难度,每个人都有自己的感受,而统计口径的差别也会带来不同的结果。如果仅以通过率来计,个人赛和战队赛的最后一题 [LCP21. 追逐游戏]、[LCP27. 黑盒光线反射] 都是最难的,其通过率分别为 20.4% 和 16.9%

而从罚时的角度看,个人赛第二题 [LCP18. 早餐组合] 和战队赛第一题 [LCP22. 黑白方格画] 分别是罚时率*最高的题目,即参赛者们犯错最多的两道题。

*罚时率=罚时用户数/提交用户数

此外,我们统计了本次参赛者提交不通过的原因。数据显示,“Wrong Answer 错误解答” 是个人赛和战队赛中最高频的错误原因。

本次大赛中,你印象最深的是哪道题?

@力扣出题官

本次力扣杯中比较推荐大家都来试试的是战队赛第五题 [LCP26. 导航装置],这道题的难点在于如何通过现象发现本质,找到题目真正的考点——树形动态规划,在找准思路之后,解答就会轻松很多。

对树形动态规划题不太有把握的扣友们可以去以下题目专项练习:

[124. 二叉树中的最大路径和]

[333. 最大 BST 子树 ]

[337. 打家劫舍 III]

[543. 二叉树的直径]

[1245. 树的直径 (邻接表上的树形DP)]

@zerotrac 力扣杯个人赛第一名

战队赛第六题 [LCP27. 黑盒光线反射] 感觉出得很好,思维难度比较高,但是用到的算法很简单。

@汪乐平 个人赛第三名

印象最深的是 [LCP27. 黑盒光线反射],数据范围卡在暴力和正解中间,而且很接近暴力,很意外。

力扣杯的全部题目已更新至「力扣题库」,题号为 LCP 17-27,感兴趣的扣友们现在就可以前往查看练习。

比赛虽然结束了,扣友们的技术提升之旅仍在继续。没有力扣杯的日子里,你还可以去 LeetBook 学习,题库练习,圈子探讨,模拟面试。

下一次,让我们在力扣杯顶峰相见!

本文作者:力扣研究院

声明:本次比赛及报告的最终解释权、版权归领扣网络(上海)有限公司所有。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值