C 语言刷 150 道 LeetCode 经验谈

2017-11-11 09:36:48 +08:00
 begeekmyfriend
抽空将自己 LeetCode 前 150 道源码整理出版了 https://github.com/begeekmyfriend/leetcode

再复杂的题我都坚持用 pure C 手写的,最多一道大概 300 行吧,不容易。即使如此仍然有 5 道打出爆机(效率排名 100%,题目越复杂几率越高),要知道那可都是累计了好几年的老题了,可见全球范围内我的代码还是有不少闪光点的:-P

C 是没有 STL 的,只能自己造轮子。链表怎么写,hashmap 怎么写,我借鉴的是内核的 list.h,写法已经形成自己一套模式,看上去还算简洁,不像参考答案写得那样 hack,混乱不堪。关键是能解决问题,特别一些复杂的逻辑,运气好还能爆机。可见对于 C 来说,也不要从 0 开始写代码,要学会站在巨人的肩膀上。

用 C 刷 LeetCode 有个坑就是动态数组,个人经验是,尽量不要用 realloc 调用,会出现 runtime error,这应该算 LeetCode 平台的 bug。之前我被困扰了好久,后来终于想出了用手写 realloc 的办法,方法是,用两倍内存扩容,手动拷贝元素,释放原指针,赋值新指针。步骤很繁琐,但再也没出问题。

刷题就像打《街霸》,前 50 道被电脑虐得磕磕绊绊,最痛苦的时段;再 50 道你就有点感觉了,开始慢慢形成自己套招; 100 道之后一般能够应付各种难度,这时候主要靠直觉和意识了。

要不要继续刷看心情吧,刷题经验不见得看题量,也许回头我还会改进一下写过的代码。顺便赞一下 leetcode 选题眼光不错,一些看似考智力的问题,其实都有经典的数学背景。不过后期一些个人贡献的题目质量比较水,没多大价值。出好题也是要看学识背景的。

欢迎与大家切磋,共同改进。
22151 次点击
所在节点    LeetCode
47 条回复
hxtheone
2017-11-13 11:28:46 +08:00
@rover5056 #40 握爪握爪
holy_sin
2017-11-13 14:04:21 +08:00
厉害 用 swift 刷了 几十道,发现对编程能力提升很大
KnightJoker
2017-11-13 18:24:21 +08:00
Pure C ! 这个就是真的厉害了,想问一下楼主每天 AC 一道平均花费的时间是多少啊?
自己当初在当前语言 beat 100%的时候就开心得不得了,也想问问楼主爆机的感觉是啥样的=。=
最后同样厚颜无耻的贴一下自己的 repo: https://github.com/KnightJoker/LeetCode-Solutions
希望能有路过大神指点指点小弟
begeekmyfriend
2017-11-13 20:02:48 +08:00
@KnightJoker 大概像“全球吹的那些神牛其实也不过如此”之感(笑)
daliang
2018-01-11 17:22:02 +08:00
@holy_sin 真的吗?如果是真的,我也准备刷题了,我时间很多.
daliang
2018-01-11 17:23:01 +08:00
向楼主学习
huminted
2018-10-13 22:11:54 +08:00
刚开始做,感觉被虐爆了,自己太菜了,头疼。

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

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

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

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

© 2021 V2EX