首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  LeetCode

C 语言刷 150 道 LeetCode 经验谈

  •  1
     
  •   begeekmyfriend · 2017-11-11 09:36:48 +08:00 · 15436 次点击
    这是一个创建于 741 天前的主题,其中的信息可能已经有所发展或是发生改变。
    抽空将自己 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 选题眼光不错,一些看似考智力的问题,其实都有经典的数学背景。不过后期一些个人贡献的题目质量比较水,没多大价值。出好题也是要看学识背景的。

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

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

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

    顺便贴一下我的 repo 厚颜无耻求一波 star: https://github.com/MrHuxu/leetcode
        18
    glues   2017-11-11 11:06:37 +08:00
    厉害!
    有没人刷过操作系统的题,看起来有点难?
        19
    begeekmyfriend   2017-11-11 11:10:46 +08:00
    @hxtheone pure C 容易打出爆机,用 C++和 Java 没这体验:-P
        20
    hxtheone   2017-11-11 11:37:05 +08:00
    @begeekmyfriend #19 嗯, 脚本语言肯定没法全语种爆机, 只能争取在当前语言里 beat 100%了
        21
    begeekmyfriend   2017-11-11 11:47:09 +08:00
    @hxtheone 我没说我是全语种,C++优化够深的话可能比 C 快,当前语言能爆出来就很不错了
        22
    halfer53   2017-11-11 11:57:05 +08:00 via Android
    链表你是怎么写?直接把 list.h 里面的 4000 行代码复制进去吗
        23
    begeekmyfriend   2017-11-11 12:03:07 +08:00
    @halfer53 你觉得那样会 Accept 吗?看我 146 LRU 的做法
        24
    lsmgeb89   2017-11-11 13:18:57 +08:00
        25
    Mirana   2017-11-11 13:32:01 +08:00
    100%可能跟它效率判定有关吧,好像每次跑都不一样。。。我也出过几次,在跑可能就不是了
        26
    GromHellscream   2017-11-11 13:46:23 +08:00
    赞一个,向楼主学习。
        27
    neosfung   2017-11-11 14:10:34 +08:00
    还是喜欢 c++多一点
    自己的结题集合,五六百道题了吧
    https://github.com/neofung/acm_backup
    含 HDU POJ URAL XMU ZOJ
        28
    holyghost   2017-11-11 15:03:08 +08:00
    C 确实很诡异,我一般用 Java,加起来刷了 455 道,算法题有 432 道。

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

    我就想问这道算法题如何解,codewars 的 c 注册入门题目
        31
    begeekmyfriend   2017-11-11 15:51:30 +08:00 via Android
    @hardman 把 a 写成 char,然后相乘,LC 上有,忘了第几道
        32
    ballshapesdsd   2017-11-11 16:30:32 +08:00
    python 快,我用一个月把免费的题刷完了
        33
    cabing   2017-11-11 21:32:27 +08:00
    赞一个~ 刷题很费时间吧 :)
        34
    ytmsdy   2017-11-11 23:03:58 +08:00 via iPhone
    @begeekmyfriend 写过 java,写过 c#,写过 python,没事不会回去瞎折腾了!
        35
    Yzstr   2017-11-11 23:41:33 +08:00 via iPhone
    向楼主学习
        36
    songteng0604   2017-11-12 01:23:44 +08:00 via iPhone
    向楼上学校
        37
    83f420984   2017-11-12 07:37:45 +08:00
    JavaScript 刷了一个半月的结果: https://github.com/zhen-ke/leetcode
        38
    huayun   2017-11-12 21:19:04 +08:00
    向楼主学习
        39
    Ashara1123   2017-11-13 10:20:52 +08:00
    向楼主学习
        40
    rover5056   2017-11-13 11:15:58 +08:00
    @hxtheone
    同 JS 党。。。
        41
    hxtheone   2017-11-13 11:28:46 +08:00
    @rover5056 #40 握爪握爪
        42
    holy_sin   2017-11-13 14:04:21 +08:00
    厉害 用 swift 刷了 几十道,发现对编程能力提升很大
        43
    KnightJoker   2017-11-13 18:24:21 +08:00
    Pure C ! 这个就是真的厉害了,想问一下楼主每天 AC 一道平均花费的时间是多少啊?
    自己当初在当前语言 beat 100%的时候就开心得不得了,也想问问楼主爆机的感觉是啥样的=。=
    最后同样厚颜无耻的贴一下自己的 repo: https://github.com/KnightJoker/LeetCode-Solutions
    希望能有路过大神指点指点小弟
        44
    begeekmyfriend   2017-11-13 20:02:48 +08:00 via Android
    @KnightJoker 大概像“全球吹的那些神牛其实也不过如此”之感(笑)
        45
    daliang   2018-01-11 17:22:02 +08:00
    @holy_sin 真的吗?如果是真的,我也准备刷题了,我时间很多.
        46
    daliang   2018-01-11 17:23:01 +08:00
    向楼主学习
        47
    huminted   2018-10-13 22:11:54 +08:00
    刚开始做,感觉被虐爆了,自己太菜了,头疼。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3557 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 05:18 · PVG 13:18 · LAX 21:18 · JFK 00:18
    ♥ Do have faith in what you're doing.