做算法题,特别是在线答题,是不是不适合用 C 语言

2018-03-25 10:56:38 +08:00
 mengyaoss77
最近想练习算法,打开 LeetCode 做题。
刚开始就碰见了那道 求最长子串的题目。
直接先用 C 写了一个最复杂的遍历方法,当然是不过关的!
然后看了下 solution 里面的方法,发现里面用了 Java 的 HashSet。
心想“这特么也行?”, 我要是用 C 岂不是得手撸一个 hash 表出来?

因为一直在学习 APUE,所以一直用的 C。
印象中 C++标准库封装了很多高级结构,看来要好好学习一下 C++了啊。
3838 次点击
所在节点    问与答
17 条回复
muziki
2018-03-25 11:05:24 +08:00
数据结构基础已经有了就不要再用 C 了,浪费时间。数据结构还在打基础的话用 C 还行
brickyang
2018-03-25 11:06:51 +08:00
多数情况下对多数人而言 C++ == 扩充标准库的 C。

你的目的如果是学习,那就手撸呗。实现功能就好,不用考虑工程性。
mrsatangel
2018-03-25 11:12:17 +08:00
用 c++吧, 那些基础设施 stl 里面都有
mengyaoss77
2018-03-25 11:14:42 +08:00
@mrsatangel #3 嗯 我看到了,C++比 C 高级多了。
yianing
2018-03-25 11:49:28 +08:00
c+-好哇,总不能什么轮子都自己从头造吧。
SPACELAN
2018-03-25 11:53:36 +08:00
最长子串又不是一定要用 hashset,

你能不用容器,不用算法库,纯手撸各种题才让你算法练到强得一匹好吧
vegito2002
2018-03-25 12:01:39 +08:00
按照 LeetCode 的标准来说, 用 C 确实是吃亏的, 因为 LeetCode 的很多题其实就是照着二三十分钟就必须 AC 的标准去设计的, 所以你还自己造轮子, 很多时候就是自己在搞自己了;

如果真的是有兴趣, hackerrank 和那些老牌竞赛网站, 可以去用 C 试试, 手上有一套好用的数据结构源代码就行了, 这些网站的题目可能会对效率的要求高很多. 但是 LeetCode 的题目, 对速度的要求算是相当宽松了, 更多的是希望你能找到理解这个题目的想法.
kljsandjb
2018-03-25 12:03:17 +08:00
我全是用 C 写的…习惯问题 :)
cheesea
2018-03-25 12:04:35 +08:00
知道数据结构是啥就行了,做题的时候直接用语言自带的轮子。
每道题都要手撸一遍数据结构,这不是闲的么。
zqqian
2018-03-25 12:08:50 +08:00
用 C with STL
mengyaoss77
2018-03-25 12:13:15 +08:00
@vegito2002 #7 不太了解竞赛各种组织,我的本意是想为秋招做准备的。 看来还是需要好好掌握高级类型的封装才好。
vegito2002
2018-03-25 12:19:27 +08:00
@mengyaoss77 刷题我个人意见还是不要急于求成, 就算是借用了别人的轮子, 先刷完一遍再说. 觉得自己厉害, 2pass 的时候再自己用 C 去捏轮子. 面试的时候, 做的出来就是做的出来, 做不出来就是做不出来, 没人管你能不能手写一个 hashmap.

我平时用 java, 但是 Python 和 c++的解法也看, 我觉得如果你对 c 熟悉, 转 c++应该还是挺快的, 就是一些常用的数据结构操作, 没有什么乱七八糟的语言特性.
victor97
2018-03-25 12:43:11 +08:00
C++ STL
做算法比赛的往往还要自己准备一份厚厚的模板。
重要的还是理解,理解数据结构的原理,复杂度,如何用到算法中。
azh7138m
2018-03-25 13:22:02 +08:00
@vegito2002 lc 相当不友好了,之前有人造数据卡 Java 内置 sort,被骂了:)
111qqz
2018-03-25 14:47:03 +08:00
可以用 c with STL 啊(
CodeingBoy
2018-03-25 19:04:44 +08:00
C with STL+1
如果 STL/Collection 能让你免于造轮,就可以使用。比如 std::sort
如果 STL 里面没有你要的东西,那用 C 也可以,反正都是要自己造
wintercoder
2018-03-25 23:39:15 +08:00
表示刷这种题 我只习惯 C/C++,其他语言写得可别扭了

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

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

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

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

© 2021 V2EX