作者BBSealion (Peaceful Warrior)
看板Soft_Job
标题Re: [讨论] 刷leetcode的语言选择
时间Sun Feb 28 13:21:02 2021
最近刚好有在指导一些学生练习,可以来回应一下这个问题
一般最常见语言有三个:C, JAVA, Python
也是最容易找到范例 code 的三个语言
各有不同优点,可以看你的状况选择
首先,如果未来有一天
有想挑战比较大平台的演算法竞赛 (FB, Google 或其他的线上竞赛)
C 与 JAVA 会是比较好的选择
C 就效能王者,JAVA 得利於伟大的 JVM 效能也很扛
而 Python 真的在一些情境下会过慢,搞不好你时间复杂度正确最後还没过...
加上还有递回深度被卡的问题(有些技巧能开大,但总归是不好用)
另外网路上有听过一些面试官觉得你都在学习演算法这门斤斤计较效率的学问了
还用 Python 这麽"慢"的语言未免有点好笑
但... 我自己身边是从没听过不给用 Python 解题的...(有版友听过可以补充)
所以我自己对於目前仅想先入门的人,还是会推荐 Python
写起来真的硬是可以少别人很多行,又易学,实用性也广,是个顺便学会不吃亏的语言
其特殊的 [] 表示法练熟的话,很多回圈都省了,也更好懂
当你想题目已经想到头很痛时,起码语言上可以让你舒服一点点
且该有的基本工具,如 map, set, heapq, OrderedDict 等也都还算齐全
Leetcode 上的题基本上写法对都会过(极少遇到卡 Python 的,出现还会被炎上抗议XD)
另外有个隐形的好处(或坏处?)是 Python 内建大数运算
所以你一开始练习可以不用思考 int, long, double 适用范围这些事情
就假想数字可以无限大,给他直线干过去就搞定
当然坏处就是... 你少了这方面的知识,被问到会挂
至於 JAVA 跟 C 比较的话
JAVA 在一般网站开发伺服器比较泛用,C 则是韧体方面较泛用,看你职业选择
当然,即使不考虑职业,这两个语言本身也仍然很有学习的价值
不过 C 在函数传值与传址的定义上与目前大多主流语言不同
要先把这块搞清楚,以免变数被傻傻复制好几次都不知道
而 C 有个很特殊的好处是可以用 typedef & define 创造一堆简写给自己用
所以其实是可以写的简洁的,但初学者当然不建议这样搞, 毕竟别人很难看懂
最後,其他常听到的语言在演算法练习上:
Javascript: 新手不推荐,效能OK,但少了些重要的基础物件与函式库,得懂得自己造
C#: 优缺点跟 JAVA 类似,但同样范例较少
Go: 我不会写所以不敢说,等版友补充了
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.171.49.21 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1614489665.A.1BC.html
※ 编辑: BBSealion (1.171.49.21 台湾), 02/28/2021 13:23:24
※ 编辑: BBSealion (1.171.49.21 台湾), 02/28/2021 13:24:41
1F:推 stupid0319: js可以写出非常漂亮的程式码 02/28 13:26
2F:推 baobomb: 要漂亮的程式码的话 感觉Kotlin也行 02/28 13:40
3F:→ baobomb: 但没人会用Kotlin刷 02/28 13:40
4F:推 art1: js 不是改善非常多了吗? 02/28 13:49
5F:推 godddddd: C#不推 语法糖太多 基础打好再看比较合适 02/28 13:54
6F:推 powerwolf543: 都用Swift刷 02/28 14:24
7F:推 LordCHTsai: 我都用js做code jam的XD 02/28 14:24
8F:推 nubao123: 蛮推用C++的 02/28 14:26
9F:→ superpandal: 效能是js > python, 真的没有函式可以自己弄一个出来 02/28 14:57
10F:推 lturtsamuel: py能用在leetcode的工具哪个js没有? 02/28 15:06
11F:→ lturtsamuel: js还被孤狗爸爸优化过 比py快多了 02/28 15:06
12F:推 panbanana: js 没有 heap 02/28 16:12
13F:推 wulouise: c++刷leetcode比c简单太多了吧.. 02/28 17:11
14F:推 lturtsamuel: 哭了 还真的没有heap 02/28 17:54
15F:推 a75468: 用 Python 打 contest 有时会遇到 top-down DP 不给过但 02/28 18:24
16F:→ a75468: bottom-up 可以的情况,这点算是少数用 Python 写 Lee 02/28 18:24
17F:→ a75468: tcode 的痛点 02/28 18:24
18F:→ s9041200: Py与c++混着用 02/28 18:28
19F:推 summerleaves: 感谢分享 02/28 18:30
20F:推 penril0326: c++ 写的好真的难 02/28 19:48
21F:推 tenhou: 据Antti Laaksonen写的Competitive Programmer’s Handboo 02/28 22:50
22F:→ tenhou: k统计,2017年Code Jam的前3000名当中有超过75%都是用C++ 02/28 22:51
23F:→ tenhou: 写比赛的 02/28 22:51
24F:→ GoodFriday: C# 语法糖有些题目秒解效能排名还很前面 02/28 23:56
25F:→ GoodFriday: 要用的话要刻意避免使用语法糖 02/28 23:57
26F:→ PS4Pro: JavaScript 现在速度和 Java 同等级好吗 多久没更新资讯了 03/01 08:30
27F:→ x123356: 没有要战 但你对那些不推的语言看起来也没很熟 03/01 10:55
28F:→ x123356: 真的推的只有c/c++ 其他都各有优缺 03/01 10:57
29F:推 lturtsamuel: 范例我觉得也没什麽意思 刷题刷到要直接复制贴上范例 03/01 11:20
30F:→ lturtsamuel: 这题也是白刷了 03/01 11:20
31F:→ lturtsamuel: 反而看范例转译成别的语言至少每一行都有重新思考 03/01 11:20
32F:→ BBSealion: 对新手来说,同语言的范例还是满重要的,当然有一定 03/01 12:58
33F:→ BBSealion: 程度就不该再依赖语言了。JS 不止没有 heapq,基本的 03/01 12:58
34F:→ BBSealion: queue 都没有吧?网路上还一堆误导人用 unshift 实作.. 03/01 12:59
35F:→ BBSealion: 当然自己造一个 queue 并不难,但对新手就是一个额外工 03/01 13:00
36F:→ BBSealion: 至於版友提到JS写演算法效能能追上JAVA,我会查查看 03/01 13:15
※ 编辑: BBSealion (59.120.195.65 台湾), 03/01/2021 13:16:39
37F:推 kingofsdtw: c++ 03/02 00:06
38F:推 siriusu: 推 03/02 13:16
39F:推 paopaosw: Java 推 03/15 17:03
40F:推 newking761: 用c写,是不是在虐自己阿 08/18 17:24
※ 编辑: BBSealion (111.240.116.168 台湾), 11/28/2021 10:06:17