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 选题眼光不错,一些看似考智力的问题,其实都有经典的数学背景。不过后期一些个人贡献的题目质量比较水,没多大价值。出好题也是要看学识背景的。

欢迎与大家切磋,共同改进。
22369 次点击
所在节点    LeetCode
47 条回复
UnknownR
2017-11-11 09:39:36 +08:00
厉害厉害,已 start & fork,正好周末学习一下
thinkIn
2017-11-11 09:46:18 +08:00
向楼主学习
Ruin
2017-11-11 09:56:06 +08:00
如果是为了练习算法思维的话,用脚本语言写应该会更有效率。一年前为了准备面试刷题,那时整个 LeetCode 只有两百多道题,用 Python 过了两遍。
n2l
2017-11-11 09:56:36 +08:00
向楼主学习。
begeekmyfriend
2017-11-11 09:57:24 +08:00
@Ruin 你说的没错,实际工程中都是用脚本 XD
ytmsdy
2017-11-11 10:10:24 +08:00
大学刷了 4 年 acm 的表示,已经完全没有任何刷题的欲望,和用 c 语言写程序的欲望了!
jimzhong
2017-11-11 10:12:59 +08:00
@ytmsdy +1
logbang
2017-11-11 10:20:16 +08:00
佩服
surewen
2017-11-11 10:36:18 +08:00
点赞。
simomo2010
2017-11-11 10:46:12 +08:00
赞啊~

刷 150 题大概用了多久?每天投入多少时间?
begeekmyfriend
2017-11-11 10:47:04 +08:00
@simomo2010 我在职啊怎么可能有太多时间,平均一天一道吧
NumberFairy
2017-11-11 10:50:37 +08:00
已经 fork,向你学习
eminemcola
2017-11-11 10:52:02 +08:00
在职情况下一天一道能坚持下来也是非常厉害的事情了 楼主很棒 向你学习
fanazhe
2017-11-11 10:53:05 +08:00
看题目难度的话楼主应该是初学算法吧?值得鼓励!
建议再深入研究一些——当然如果只是想刷一刷面试题的话就无所谓了
@ytmsdy 从开始做 ICPC 比赛到工作这么多年,我好像从来都是用 C++几乎没用过 C 233333

PS:看楼主的“出版”两个字感觉浑身不舒服……
begeekmyfriend
2017-11-11 10:56:20 +08:00
@ytmsdy 现在的 C 已经有成熟的规避指针的写法,比如链表,也就几十行代码。同时又规避了 C++库带来平台问题,研究一下还是很值得的。
begeekmyfriend
2017-11-11 11:01:12 +08:00
@fanazhe 深入的话我情愿去研究数据领域的算法,比如机器学习,神经网络,毕竟在行业领域有用。竞赛之类的算法还是罢了,毕竟年纪大了。。。
hxtheone
2017-11-11 11:01:33 +08:00
Pure C 刷题就真是厉害了, 我就是图方便用脚本语言刷题的那种, 不过为了啃 hard 题已经重新拿起算法书了

顺便贴一下我的 repo 厚颜无耻求一波 star: https://github.com/MrHuxu/leetcode
glues
2017-11-11 11:06:37 +08:00
厉害!
有没人刷过操作系统的题,看起来有点难?
begeekmyfriend
2017-11-11 11:10:46 +08:00
@hxtheone pure C 容易打出爆机,用 C++和 Java 没这体验:-P
hxtheone
2017-11-11 11:37:05 +08:00
@begeekmyfriend #19 嗯, 脚本语言肯定没法全语种爆机, 只能争取在当前语言里 beat 100%了

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

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

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

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

© 2021 V2EX