V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mengyaoss77
V2EX  ›  问与答

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

  •  
  •   mengyaoss77 · 2018-03-25 10:56:38 +08:00 · 4028 次点击
    这是一个创建于 2469 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近想练习算法,打开 LeetCode 做题。
    刚开始就碰见了那道 求最长子串的题目。
    直接先用 C 写了一个最复杂的遍历方法,当然是不过关的!
    然后看了下 solution 里面的方法,发现里面用了 Java 的 HashSet。
    心想“这特么也行?”, 我要是用 C 岂不是得手撸一个 hash 表出来?

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

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

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

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

    我平时用 java, 但是 Python 和 c++的解法也看, 我觉得如果你对 c 熟悉, 转 c++应该还是挺快的, 就是一些常用的数据结构操作, 没有什么乱七八糟的语言特性.
    victor97
        13
    victor97  
       2018-03-25 12:43:11 +08:00 via Android
    C++ STL
    做算法比赛的往往还要自己准备一份厚厚的模板。
    重要的还是理解,理解数据结构的原理,复杂度,如何用到算法中。
    azh7138m
        14
    azh7138m  
       2018-03-25 13:22:02 +08:00 via Android
    @vegito2002 lc 相当不友好了,之前有人造数据卡 Java 内置 sort,被骂了:)
    111qqz
        15
    111qqz  
       2018-03-25 14:47:03 +08:00 via Android
    可以用 c with STL 啊(
    CodeingBoy
        16
    CodeingBoy  
       2018-03-25 19:04:44 +08:00   ❤️ 1
    C with STL+1
    如果 STL/Collection 能让你免于造轮,就可以使用。比如 std::sort
    如果 STL 里面没有你要的东西,那用 C 也可以,反正都是要自己造
    wintercoder
        17
    wintercoder  
       2018-03-25 23:39:15 +08:00
    表示刷这种题 我只习惯 C/C++,其他语言写得可别扭了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   940 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:19 · PVG 05:19 · LAX 13:19 · JFK 16:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.