在 Java 中在工具包中,就提供了多种多样的数据结构的支持 map hash 栈 等等。在工业级别上这种的老牌而又稳定的数据以及语言,给予开发者很多的方便。
在 Go 中没有对应的像 Java 中那么多的数据结构支持,但是在语法上给予开发者足够的想象空间。神奇的“切片”
在 PHP 中最重要的还是在于 PHP 的数组。PHP 中的数组是万能的小黑,在官方提供的函数给予开发者足够的方便,这可能就是 PHP 能够快速开发的秘诀。
Python 接触的不多,但是每次用 Python 解决问题,好像不用费太多的步骤,直击要害。但是自己用后的感觉就是自己不知道 Python 在内部搞了什么飞机
Ps:这个只是自己的感觉。也没有什么太多的感受,就是在相同的思路上,每个语言的实现方式的不同。也能希望得到个位的指点。
1
chizuo 2020-06-17 22:36:33 +08:00 3
C++写算法才是真的爽,上到各种 stl,下到各种优化,随你折腾。
|
2
Vegetable 2020-06-17 23:02:58 +08:00 2
因为做题默认不能用高级类库方法,只用数据结构,用什么语言这些基础设施的区别没特别大,当然还是会有。
但是总体来说 写得爽,跑的憋屈 写的憋屈,跑的爽 |
3
hejw19970413 OP @Vegetable 嗯 有道理
|
4
yannxia 2020-06-17 23:38:50 +08:00 2
刷题我感觉最爽的是 Python,直接撸算法核心思想,缺点就 Timeout (个别题目)。
|
5
lithbitren 2020-06-17 23:49:18 +08:00
如果只写各种语言内的最佳实现,py 的最佳实践九成以上都是调库,标准库实现大概率比自己实现要快,一行版的答案非常多,其他语言则很难说,毕竟一般算法题不用考虑太复杂的边界和类型,可以节省很多数据结构的开销。
|
6
lithbitren 2020-06-17 23:50:41 +08:00
不过一般也是只有 python 发明了超越传统复杂度的新算法,大家都能大概看懂,其他语言如果出现了新算法,基本没啥人看得懂。
|
7
786375312123 2020-06-17 23:54:26 +08:00
@yannxia python 如果算法对的话,不会 TLE 。很多时候 TLE 了看看评论区
|
8
kidlj 2020-06-18 00:13:31 +08:00 via iPhone
Go 在这些当中是最 accessible 的吧,不论是什么库,点进去看实现,因为没什么 magic,很容易就看懂。
|
9
lithbitren 2020-06-18 00:13:59 +08:00 1
@786375312123 也不一定,比如 leetcode 839,从比赛变成常规题目的时候扩了数据,导致主流的两种方法用 py 写都过不了,其他主流静态语言都能轻松暴力过,国际版的 py 也没人过,卡了我两个星期才想到分类讨论 ac 了,过了以后我提了意见给官方说是不是应该延长计时,结果官方过了几天也出了一个分类讨论的解法。。
|
10
cmdOptionKana 2020-06-18 00:26:34 +08:00
@kidlj 与现代语言相比,缺少现代黑魔法,与 C 相比,缺少古代黑魔法,因此貌似真的没有比 Go 更直白的语言了。
|
11
786375312123 2020-06-18 00:34:25 +08:00
@lithbitren 一般你用暴力解法过的,就算 oa 过了,现实中 onsite 面试写出来这种会有大概率挂。你说的本身暴力就不应该让过
|
12
lithbitren 2020-06-18 01:02:11 +08:00
@786375312123 一般是这么说没错,那题除了 python 需要分类讨论,其他语言完全不需要分类讨论就能 ac,当时几百个通过的人里也没人把分类讨论当正解,常规法写完就完了。leetcode 近千题刷下来,需要在时间复杂度上分类讨论的题目几乎没有,这应该是我遇到唯一一道,很难说是一般面试考察的重点,一般面试最多是要求写出不同时间复杂度的解法。当时 leetcode 的 py 版本是 3.7,分类讨论过这题平均要 4-6 秒,不分类二十秒以上是必然的,而 c++不分类讨论也就是 200-500ms,这个时间量级在 leetcode 里也见怪不怪了,一般不会想到要去分类讨论做这题。
|
13
786375312123 2020-06-18 01:16:47 +08:00
@lithbitren 时间复杂度上需要讨论的多的去了,亚马逊最高频的题 Critical Connections in a Network 就是。
|
14
Mirage09 2020-06-18 03:30:16 +08:00
@786375312123 那道题是 OA 题,至今不理解为什么要放这种题进 OA...
|
15
786375312123 2020-06-18 05:27:56 +08:00
@Mirage09 你说 Critical Connections in a Network ?没办法,就那么几个恶心的难题,你总要会做。
|
16
yafoo 2020-06-18 06:31:24 +08:00 via Android
所以说,PHP 是世界上最好的语言
|
17
jxie0755 2020-06-18 07:25:08 +08:00 via iPhone
@lithbitren 自从我发现很多 py 的一行版并不是最快的解法后,我感觉我就不再纠结于一定要一行解决问题了。
|
18
Mirage09 2020-06-18 08:33:53 +08:00
@786375312123 会做是会做,但是跟其他普通 OA 题差距也太大了…幸好当时没碰到这题
|
19
Mirage09 2020-06-18 08:36:43 +08:00
Python 的 one-liner 没意义,有本事你面试的时候也这么写…而且你看得懂,能写出来不代表面试官看得懂
|
20
VDimos 2020-06-18 08:39:49 +08:00 via Android
树,图,链表,有些题 leetcode 直接就不提供 rust 版本的。其实 rust 用 raw pointer 也能写,但是官方不开放。
|
21
sxfscool 2020-06-18 08:46:34 +08:00
有不少 PHPer 分不清 map 和 array[狗头]
|
22
lithbitren 2020-06-18 09:07:12 +08:00 via iPhone
@786375312123 1192 吗?不是直接 tarjan 嘛,比赛的时候几分钟用拓扑排序 ac 了,比完才意识到拓扑排序是错的,这题怎么讨论
|
23
Rwing 2020-06-18 09:17:59 +08:00
C# ???
|
24
liberty1900 2020-06-18 09:18:12 +08:00 via Android
发明一种语言,在装编译器的时候可以选择封装度,伪"动态"类型
|
25
goodboy95 2020-06-18 10:00:42 +08:00
大学一直用 C++搞算法题,工作两年之后想再试试,结果发现 C++没了 split 都会让我非常难受……
|
26
goodboy95 2020-06-18 10:06:21 +08:00
@786375312123 当初在知乎上看见有人贴这题,给我的感觉就是,打 ACM 的那帮子人到底接触了几百种数据结构和算法啊
|
27
786375312123 2020-06-18 15:26:14 +08:00
@lithbitren 对,“直接”tarjan 。暴力解呗,不需要考虑时间复杂度?
|
28
786375312123 2020-06-18 15:44:46 +08:00
@goodboy95 高频题,就那么几道难的。多做做就好了,其实也没什么麻烦的。都是熟能生巧罢了
|
29
goodboy95 2020-06-18 17:41:47 +08:00
@786375312123 主要是一群 ACMer 说这是 ACM 签到题,比赛时给人送分的那种……哎,感觉他们这水实在深
|
30
786375312123 2020-06-18 17:45:31 +08:00
@goodboy95 你花个一年时间去备赛也会一样的,这东西就是熟能生巧。。。而且 acm 的难度不是数据结构有多难,大多数情况是读题你得想明白这个题到底是什么问题,用什么样的算法。
|
31
lithbitren 2020-06-18 20:27:07 +08:00
@786375312123 我说的时间复杂度讨论不是这种,说的是那题的两种解法一种是 O(m*m*n)一种是 O(m*n*n*n),python 必须依据 m 和 n 的数据规模分类讨论成 O(m*n*min(m, n*n))的复杂度才能过,其他语言都不用。
|
32
786375312123 2020-06-18 22:56:32 +08:00
@lithbitren 你不是说暴力吗?暴力你也可以试试遍历树,用其他语言
|
34
LennieChoi 2020-06-19 10:20:57 +08:00
写算法还是 python 最爽啊,不是说它提供了很多工具函数,是他的语法简便性。尤其 A 题的时候,不用写括号,不用写大括号,不用写分号,不用 var,各种懒人操作
|