V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Yc1992
V2EX  ›  Python

leetcode 上面时间最短的 solution 都是用了什么黑科技?

  •  
  •   Yc1992 ·
    bufrr · 2016-08-16 00:18:26 +08:00 · 8586 次点击
    这是一个创建于 3024 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最简单的 Reverse String https://leetcode.com/problems/reverse-string/,我用了很多方法,最后还是发现 str[::-1] 时间最短, 64ms ,但是也只能超过 77%。

    看了统计数据,不能理解 48ms 是如何做到的。有人知道吗?
    第 1 条附言  ·  2016-08-16 11:05:26 +08:00
    看来是 leetcode 计时的问题,同一份代码不同时间提交时间不同导致的。
    34 条回复    2019-02-13 12:53:07 +08:00
    churchmice
        1
    churchmice  
       2016-08-16 01:10:34 +08:00
    有个毛的黑科技,别用这么高层的语言,用 C 写,4ms 都没问题
    kkzxak47
        2
    kkzxak47  
       2016-08-16 01:15:06 +08:00 via Android
    我记得 LeetCode 服务器计时不稳定,相同的代码能差 50%,现在不知道还这样不
    lsmgeb89
        3
    lsmgeb89  
       2016-08-16 01:35:29 +08:00
    @churchmice 不是同一种语言之前相互比的嘛
    ptyfork
        4
    ptyfork  
       2016-08-16 02:33:00 +08:00
    哪里可以看到统计数据, 我怎么看不到?
    czheo
        5
    czheo  
       2016-08-16 04:48:39 +08:00
    2F 正解
    benpichu
        6
    benpichu  
       2016-08-16 04:50:37 +08:00 via Android
    @kkzxak47 [确实是这样(]
    livc
        7
    livc  
       2016-08-16 07:42:38 +08:00 via Android
    刷算法题就要用 c/cpp ,其他感觉锻炼价值不大。
    MrGba2z
        8
    MrGba2z  
       2016-08-16 08:26:33 +08:00
    @ptyfork
    你提交完通过的话会显示效率分布图的
    scnace
        9
    scnace  
       2016-08-16 08:32:17 +08:00 via Android
    @MrGba2z golang 表示长期没有统计数据(
    Garantion
        10
    Garantion  
       2016-08-16 08:35:16 +08:00
    我听说有些可以猜测试用例。
    tinyproxy
        11
    tinyproxy  
       2016-08-16 08:38:21 +08:00 via iPhone
    赞同二楼,因为试过一段代码写的较烂,第一次提交 fail ,手抖再点了一下过了。
    shyling
        12
    shyling  
       2016-08-16 09:38:26 +08:00 via Android
    反对说刷题就要用 c/cpp 的。
    est
        13
    est  
       2016-08-16 09:42:46 +08:00
    上次黑 leetcode 发现判断结果是 stdout 判断的。于是就放弃了。
    bjzhou1990
        14
    bjzhou1990  
       2016-08-16 10:11:00 +08:00
    遇到一题说是求一个数的开平方根,我用 Java 的 Math.sqrt 居然直接过了...什么鬼...
    21grams
        15
    21grams  
       2016-08-16 10:34:04 +08:00
    @bjzhou1990 这没什么问题吧
    tttwww18
        16
    tttwww18  
       2016-08-16 10:48:50 +08:00
    方差很大,参考价值不高。只要不是一直垫底就没太大问题
    Hyeongo
        17
    Hyeongo  
       2016-08-16 10:58:21 +08:00
    我也很好奇,有时删了几个无关变量,时间反而变长了。顺便提一句我是用 js 刷的,锻炼一下 js ,嘿嘿嘿
    aprikyblue
        18
    aprikyblue  
       2016-08-16 11:05:23 +08:00 via Android
    @bjzhou1990 本来就不会检查你代码用了什么。。。我拿 c++ STL 的 std::sort 也过了。。。
    pangliang
        19
    pangliang  
       2016-08-16 11:20:18 +08:00
    刷 leetcode 正确的姿势是,
    第一遍,最快速的写出一个 正确的
    第二遍,自己优化自己的代码, 尽量的达到中上
    第三遍,看讨论里最快的代码, 想想是为啥
    第四遍, 试试能否更快
    lycheng
        20
    lycheng  
       2016-08-16 11:23:50 +08:00
    同样的算法,用 Py 写的能过,用 Golang 写的一直 TLE ,我也是醉了
    pangliang
        21
    pangliang  
       2016-08-16 11:31:40 +08:00
    go 不是很懂, 针对这题的话, O(n) 可以再压缩 成 O(n/2), 一般标准库的应该都是用的 O(n)
    然后再压缩的话, 就是看是否有多余的运算, 比如 循环里 i < string.length / 2 可以优化 掉
    8bit
        22
    8bit  
       2016-08-16 12:03:47 +08:00
    这题 Java 竟然优化得比 C++都厉害了
    wy315700
        23
    wy315700  
       2016-08-16 12:07:11 +08:00
    居然不用 ptrace 进行统计
    lcorange
        24
    lcorange  
       2016-08-16 12:28:29 +08:00 via Android
    @8bit 不是优化的厉害,是改了计时方式,把虚拟机启动时间忽略了
    tinyproxy
        25
    tinyproxy  
       2016-08-16 12:44:56 +08:00 via iPhone
    @8bit 还有就是可能测试用例不一样,所以不同语言比较意义不大。
    shimanooo
        26
    shimanooo  
       2016-08-16 12:51:40 +08:00
    理论上, reverse string 标一个‘ reversed ’就行了, O(1)的。然后用的人反过来读就行...
    jerryshao
        27
    jerryshao  
       2016-08-16 17:13:53 +08:00
    直接 return new StringBuilder(s).reverse().toString(); // 4ms 逃
    8bit
        28
    8bit  
       2016-08-16 18:35:02 +08:00
    @lcorange 感觉的确是省了,提交比较早的答案和现在差的不少


    @tinyproxy 感觉测试用例应该差不多少吧,我在想他们是不是提供了一些典型字符串字面值的测试用例
    tinyproxy
        29
    tinyproxy  
       2016-08-16 19:20:08 +08:00
    @8bit 我之前刷的一些题目,要求如果是用 C 解决的话,空间要求是 O(1),所以一些题目的不同语言测试用例会有一些不同的。
    还有就是之前知乎上面看别人说的(出处找不着了), C/C++的测试用例 size 可能会比起他语言的 size 大,如果是这种情况,那么比较速度其实不公平。
    8bit
        30
    8bit  
       2016-08-16 20:04:20 +08:00
    @tinyproxy 这个方面我倒是没想到
    geeti
        31
    geeti  
       2016-08-18 12:54:44 +08:00
    lc 的计时方差很多。提交三次,自己去个平均值好了。 99%那些一般也是 90%左右的 glitch
    hjb912
        32
    hjb912  
       2018-02-07 17:52:17 +08:00
    python 22 题 42ms
    MnameHZJ
        33
    MnameHZJ  
       2019-01-09 02:40:11 +08:00
    2F 果然是正解,我相同的代码一开始是 105ms,再运行一次就编程 75ms 了。
    autogen
        34
    autogen  
       2019-02-13 12:53:07 +08:00
    2019 年。。。现在还这样,
    同样的代码,多提交几次,可以获得更短的执行时间
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1002 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:26 · PVG 05:26 · LAX 13:26 · JFK 16:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.