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

2020-06-17 21:40:25 +08:00
 hejw19970413

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

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

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

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

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

4856 次点击
所在节点    程序员
34 条回复
chizuo
2020-06-17 22:36:33 +08:00
C++写算法才是真的爽,上到各种 stl,下到各种优化,随你折腾。
Vegetable
2020-06-17 23:02:58 +08:00
因为做题默认不能用高级类库方法,只用数据结构,用什么语言这些基础设施的区别没特别大,当然还是会有。

但是总体来说

写得爽,跑的憋屈
写的憋屈,跑的爽
hejw19970413
2020-06-17 23:30:47 +08:00
@Vegetable 嗯 有道理
yannxia
2020-06-17 23:38:50 +08:00
刷题我感觉最爽的是 Python,直接撸算法核心思想,缺点就 Timeout (个别题目)。
lithbitren
2020-06-17 23:49:18 +08:00
如果只写各种语言内的最佳实现,py 的最佳实践九成以上都是调库,标准库实现大概率比自己实现要快,一行版的答案非常多,其他语言则很难说,毕竟一般算法题不用考虑太复杂的边界和类型,可以节省很多数据结构的开销。
lithbitren
2020-06-17 23:50:41 +08:00
不过一般也是只有 python 发明了超越传统复杂度的新算法,大家都能大概看懂,其他语言如果出现了新算法,基本没啥人看得懂。
786375312123
2020-06-17 23:54:26 +08:00
@yannxia python 如果算法对的话,不会 TLE 。很多时候 TLE 了看看评论区
kidlj
2020-06-18 00:13:31 +08:00
Go 在这些当中是最 accessible 的吧,不论是什么库,点进去看实现,因为没什么 magic,很容易就看懂。
lithbitren
2020-06-18 00:13:59 +08:00
@786375312123 也不一定,比如 leetcode 839,从比赛变成常规题目的时候扩了数据,导致主流的两种方法用 py 写都过不了,其他主流静态语言都能轻松暴力过,国际版的 py 也没人过,卡了我两个星期才想到分类讨论 ac 了,过了以后我提了意见给官方说是不是应该延长计时,结果官方过了几天也出了一个分类讨论的解法。。
cmdOptionKana
2020-06-18 00:26:34 +08:00
@kidlj 与现代语言相比,缺少现代黑魔法,与 C 相比,缺少古代黑魔法,因此貌似真的没有比 Go 更直白的语言了。
786375312123
2020-06-18 00:34:25 +08:00
@lithbitren 一般你用暴力解法过的,就算 oa 过了,现实中 onsite 面试写出来这种会有大概率挂。你说的本身暴力就不应该让过
lithbitren
2020-06-18 01:02:11 +08:00
@786375312123 一般是这么说没错,那题除了 python 需要分类讨论,其他语言完全不需要分类讨论就能 ac,当时几百个通过的人里也没人把分类讨论当正解,常规法写完就完了。leetcode 近千题刷下来,需要在时间复杂度上分类讨论的题目几乎没有,这应该是我遇到唯一一道,很难说是一般面试考察的重点,一般面试最多是要求写出不同时间复杂度的解法。当时 leetcode 的 py 版本是 3.7,分类讨论过这题平均要 4-6 秒,不分类二十秒以上是必然的,而 c++不分类讨论也就是 200-500ms,这个时间量级在 leetcode 里也见怪不怪了,一般不会想到要去分类讨论做这题。
786375312123
2020-06-18 01:16:47 +08:00
@lithbitren 时间复杂度上需要讨论的多的去了,亚马逊最高频的题 Critical Connections in a Network 就是。
Mirage09
2020-06-18 03:30:16 +08:00
@786375312123 那道题是 OA 题,至今不理解为什么要放这种题进 OA...
786375312123
2020-06-18 05:27:56 +08:00
@Mirage09 你说 Critical Connections in a Network ?没办法,就那么几个恶心的难题,你总要会做。
yafoo
2020-06-18 06:31:24 +08:00
所以说,PHP 是世界上最好的语言
jxie0755
2020-06-18 07:25:08 +08:00
@lithbitren 自从我发现很多 py 的一行版并不是最快的解法后,我感觉我就不再纠结于一定要一行解决问题了。
Mirage09
2020-06-18 08:33:53 +08:00
@786375312123 会做是会做,但是跟其他普通 OA 题差距也太大了…幸好当时没碰到这题
Mirage09
2020-06-18 08:36:43 +08:00
Python 的 one-liner 没意义,有本事你面试的时候也这么写…而且你看得懂,能写出来不代表面试官看得懂
VDimos
2020-06-18 08:39:49 +08:00
树,图,链表,有些题 leetcode 直接就不提供 rust 版本的。其实 rust 用 raw pointer 也能写,但是官方不开放。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/682495

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX