这几天通过做算法题,谈谈自己的对语言的感觉

hejw19970413

在 Java 中在工具包中,就提供了多种多样的数据结构的支持 map hash 栈 等等。在工业级别上这种的老牌而又稳定的数据以及语言,给予开发者很多的方便。

在 Go 中没有对应的像 Java 中那么多的数据结构支持,但是在语法上给予开发者足够的想象空间。神奇的“切片”

在 PHP 中最重要的还是在于 PHP 的数组。PHP 中的数组是万能的小黑,在官方提供的函数给予开发者足够的方便,这可能就是 PHP 能够快速开发的秘诀。

Python 接触的不多,但是每次用 Python 解决问题,好像不用费太多的步骤,直击要害。但是自己用后的感觉就是自己不知道 Python 在内部搞了什么飞机

Ps:这个只是自己的感觉。也没有什么太多的感受,就是在相同的思路上,每个语言的实现方式的不同。也能希望得到个位的指点。

30 条回复  •  2020-06-18 17:45:31 +08:00
chizuo
chizuo21 小时 37 分钟前
C++写算法才是真的爽,上到各种 stl,下到各种优化,随你折腾。
1
Vegetable
Vegetable21 小时 10 分钟前
因为做题默认不能用高级类库方法,只用数据结构,用什么语言这些基础设施的区别没特别大,当然还是会有。

但是总体来说

写得爽,跑的憋屈
写的憋屈,跑的爽
2
hejw19970413
hejw1997041320 小时 43 分钟前
@Vegetable 嗯 有道理
3
yannxia
yannxia20 小时 35 分钟前
刷题我感觉最爽的是 Python,直接撸算法核心思想,缺点就 Timeout (个别题目)。
4
lithbitren
lithbitren20 小时 24 分钟前
如果只写各种语言内的最佳实现,py 的最佳实践九成以上都是调库,标准库实现大概率比自己实现要快,一行版的答案非常多,其他语言则很难说,毕竟一般算法题不用考虑太复杂的边界和类型,可以节省很多数据结构的开销。
5
lithbitren
lithbitren20 小时 23 分钟前
不过一般也是只有 python 发明了超越传统复杂度的新算法,大家都能大概看懂,其他语言如果出现了新算法,基本没啥人看得懂。
6
786375312123
78637531212320 小时 19 分钟前
@yannxia python 如果算法对的话,不会 TLE 。很多时候 TLE 了看看评论区
7
kidlj
kidlj20 小时 0 分钟前 via iPhone
Go 在这些当中是最 accessible 的吧,不论是什么库,点进去看实现,因为没什么 magic,很容易就看懂。
8
lithbitren
lithbitren19 小时 59 分钟前
@786375312123 也不一定,比如 leetcode 839,从比赛变成常规题目的时候扩了数据,导致主流的两种方法用 py 写都过不了,其他主流静态语言都能轻松暴力过,国际版的 py 也没人过,卡了我两个星期才想到分类讨论 ac 了,过了以后我提了意见给官方说是不是应该延长计时,结果官方过了几天也出了一个分类讨论的解法。。
9
cmdOptionKana
cmdOptionKana19 小时 47 分钟前
@kidlj 与现代语言相比,缺少现代黑魔法,与 C 相比,缺少古代黑魔法,因此貌似真的没有比 Go 更直白的语言了。
10
786375312123
78637531212319 小时 39 分钟前
@lithbitren 一般你用暴力解法过的,就算 oa 过了,现实中 onsite 面试写出来这种会有大概率挂。你说的本身暴力就不应该让过
11
lithbitren
lithbitren19 小时 11 分钟前
@786375312123 一般是这么说没错,那题除了 python 需要分类讨论,其他语言完全不需要分类讨论就能 ac,当时几百个通过的人里也没人把分类讨论当正解,常规法写完就完了。leetcode 近千题刷下来,需要在时间复杂度上分类讨论的题目几乎没有,这应该是我遇到唯一一道,很难说是一般面试考察的重点,一般面试最多是要求写出不同时间复杂度的解法。当时 leetcode 的 py 版本是 3.7,分类讨论过这题平均要 4-6 秒,不分类二十秒以上是必然的,而 c++不分类讨论也就是 200-500ms,这个时间量级在 leetcode 里也见怪不怪了,一般不会想到要去分类讨论做这题。
12
786375312123
78637531212318 小时 57 分钟前
@lithbitren 时间复杂度上需要讨论的多的去了,亚马逊最高频的题 Critical Connections in a Network 就是。
13
Mirage09
Mirage0916 小时 43 分钟前
@786375312123 那道题是 OA 题,至今不理解为什么要放这种题进 OA...
14
786375312123
78637531212314 小时 45 分钟前
@Mirage09 你说 Critical Connections in a Network ?没办法,就那么几个恶心的难题,你总要会做。
15
yafoo
yafoo13 小时 42 分钟前 via Android
所以说,PHP 是世界上最好的语言
16
jxie0755
jxie075512 小时 48 分钟前 via iPhone
@lithbitren 自从我发现很多 py 的一行版并不是最快的解法后,我感觉我就不再纠结于一定要一行解决问题了。
17
Mirage09
Mirage0911 小时 40 分钟前
@786375312123 会做是会做,但是跟其他普通 OA 题差距也太大了…幸好当时没碰到这题
18
Mirage09
Mirage0911 小时 37 分钟前
Python 的 one-liner 没意义,有本事你面试的时候也这么写…而且你看得懂,能写出来不代表面试官看得懂
19
VDimos
VDimos11 小时 34 分钟前 via Android
树,图,链表,有些题 leetcode 直接就不提供 rust 版本的。其实 rust 用 raw pointer 也能写,但是官方不开放。
20
sxfscool
sxfscool11 小时 27 分钟前
有不少 PHPer 分不清 map 和 array[狗头]
21
lithbitren
lithbitren11 小时 6 分钟前 via iPhone
@786375312123 1192 吗?不是直接 tarjan 嘛,比赛的时候几分钟用拓扑排序 ac 了,比完才意识到拓扑排序是错的,这题怎么讨论
22
Rwing
Rwing10 小时 55 分钟前
C# ???
23
liberty1900
liberty190010 小时 55 分钟前 via Android
发明一种语言,在装编译器的时候可以选择封装度,伪"动态"类型
24
goodboy95
goodboy9510 小时 13 分钟前
大学一直用 C++搞算法题,工作两年之后想再试试,结果发现 C++没了 split 都会让我非常难受……
25
goodboy95
goodboy9510 小时 7 分钟前
@786375312123 当初在知乎上看见有人贴这题,给我的感觉就是,打 ACM 的那帮子人到底接触了几百种数据结构和算法啊
26
786375312123
7863753121234 小时 47 分钟前
@lithbitren 对,“直接”tarjan 。暴力解呗,不需要考虑时间复杂度?
27
786375312123
7863753121234 小时 29 分钟前
@goodboy95 高频题,就那么几道难的。多做做就好了,其实也没什么麻烦的。都是熟能生巧罢了
28
goodboy95
goodboy952 小时 32 分钟前
@786375312123 主要是一群 ACMer 说这是 ACM 签到题,比赛时给人送分的那种……哎,感觉他们这水实在深
29
786375312123
7863753121232 小时 28 分钟前
@goodboy95 你花个一年时间去备赛也会一样的,这东西就是熟能生巧。。。而且 acm 的难度不是数据结构有多难,大多数情况是读题你得想明白这个题到底是什么问题,用什么样的算法。
30