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

欢迎与大家切磋,共同改进。
22136 次点击
所在节点    LeetCode
47 条回复
begeekmyfriend
2017-11-11 11:47:09 +08:00
@hxtheone 我没说我是全语种,C++优化够深的话可能比 C 快,当前语言能爆出来就很不错了
halfer53
2017-11-11 11:57:05 +08:00
链表你是怎么写?直接把 list.h 里面的 4000 行代码复制进去吗
begeekmyfriend
2017-11-11 12:03:07 +08:00
@halfer53 你觉得那样会 Accept 吗?看我 146 LRU 的做法
lsmgeb89
2017-11-11 13:18:57 +08:00
Mirana
2017-11-11 13:32:01 +08:00
100%可能跟它效率判定有关吧,好像每次跑都不一样。。。我也出过几次,在跑可能就不是了
GromHellscream
2017-11-11 13:46:23 +08:00
赞一个,向楼主学习。
neosfung
2017-11-11 14:10:34 +08:00
还是喜欢 c++多一点
自己的结题集合,五六百道题了吧
https://github.com/neofung/acm_backup
含 HDU POJ URAL XMU ZOJ
holyghost
2017-11-11 15:03:08 +08:00
C 确实很诡异,我一般用 Java,加起来刷了 455 道,算法题有 432 道。

顺便献个丑: https://github.com/liupangzi/codekata/tree/master/leetcode
sfqtsh
2017-11-11 15:18:52 +08:00
每个题下面有个 README.md 就好了,里面包含题目内容!
hardman
2017-11-11 15:43:22 +08:00
int multiply(int a, char *b) {
return a b;
}

我就想问这道算法题如何解,codewars 的 c 注册入门题目
begeekmyfriend
2017-11-11 15:51:30 +08:00
@hardman 把 a 写成 char,然后相乘,LC 上有,忘了第几道
ballshapesdsd
2017-11-11 16:30:32 +08:00
python 快,我用一个月把免费的题刷完了
cabing
2017-11-11 21:32:27 +08:00
赞一个~ 刷题很费时间吧 :)
ytmsdy
2017-11-11 23:03:58 +08:00
@begeekmyfriend 写过 java,写过 c#,写过 python,没事不会回去瞎折腾了!
Yzstr
2017-11-11 23:41:33 +08:00
向楼主学习
songteng0604
2017-11-12 01:23:44 +08:00
向楼上学校
83f420984
2017-11-12 07:37:45 +08:00
JavaScript 刷了一个半月的结果: https://github.com/zhen-ke/leetcode
huayun
2017-11-12 21:19:04 +08:00
向楼主学习
Ashara1123
2017-11-13 10:20:52 +08:00
向楼主学习
rover5056
2017-11-13 11:15:58 +08:00
@hxtheone
同 JS 党。。。

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

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

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

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

© 2021 V2EX