作者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/m.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