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
darkTianTian
V2EX  ›  Python

约不到面试,只好潜心钻研算法。

  •  
  •   darkTianTian · 2019-03-16 17:37:34 +08:00 · 6634 次点击
    这是一个创建于 2080 天前的主题,其中的信息可能已经有所发展或是发生改变。

    裸辞一个多月,只面了几家创业公司,目前一个 offer 还没拿到。每天只能刷 LeetCode 艰难维持。 分享一个我最近写的《剑指 offer 》 python 的题解,https://github.com/darkTianTian/sword-for-offer/tree/master 希望可以帮(pian)助(ji)各(ge)位(star)和我一样还在挣扎的 pythoner.

    第 1 条附言  ·  2019-03-18 23:55:43 +08:00
    我尝试在一楼所说的 58 题上写了常规的写法,但是在 Python 中 str 类型时不可变对象,没法实现 O(1)的空间复杂度。
    所以一行的写法在面试 Python 岗位的时候是绝对可行的,如果真要说是算法岗位,那也用不到 Python,毕竟执行速度不如 C 和 Java。
    34 条回复    2019-03-18 23:57:18 +08:00
    xupefei
        1
    xupefei  
       2019-03-16 20:00:46 +08:00   ❤️ 6


    LZ 你确定在考算法的时候能这么玩?
    azh7138m
        2
    azh7138m  
       2019-03-16 20:28:12 +08:00 via Android
    好怀念刷题的时间(
    leetcode 以数据结构基础为主吧,算法比较少
    lxy42
        3
    lxy42  
       2019-03-16 20:30:45 +08:00 via Android
    @xupefei 😂
    Qzier
        4
    Qzier  
       2019-03-16 21:00:49 +08:00 via iPad
    @xupefei 前面的都是赘余的,其实 s[::-1] 即可。至于原地反转,另说。
    Qzier
        5
    Qzier  
       2019-03-16 21:02:33 +08:00
    @xupefei 不好意思,看错了。
    darkTianTian
        6
    darkTianTian  
    OP
       2019-03-16 21:31:28 +08:00
    @xupefei 为什么不能,有些题还不限制各种标准库函数呢。
    darkTianTian
        7
    darkTianTian  
    OP
       2019-03-16 21:36:03 +08:00
    @azh7138m 嗯? LeetCode 上不是算法么
    pwrliang
        8
    pwrliang  
       2019-03-16 21:36:38 +08:00 via Android   ❤️ 1
    跟楼主差不多,我刷题是为了以后不去拧螺丝。挂一个我的博客,https://blog.pwrliang.com
    我在刷用 Java 刷 Leetcode,我不是直接贴代码,而是给出了详细的解释,并尽量写出多种解法。
    cyn
        9
    cyn  
       2019-03-16 21:44:02 +08:00 via Android
    同款头像
    azh7138m
        10
    azh7138m  
       2019-03-16 21:51:54 +08:00
    个人是觉得普及组的题目比较难 :D
    darkTianTian
        11
    darkTianTian  
    OP
       2019-03-16 22:05:59 +08:00
    @cyn hhh,巧了不是
    carlclone
        12
    carlclone  
       2019-03-16 23:35:28 +08:00
    这反转字符串.....你觉得可以 , 面试官可不这么觉得 , 这题目考的是数组操作 , 还是去 LeetCode 看 Discuss 吧
    GodFather66
        13
    GodFather66  
       2019-03-17 01:25:32 +08:00
    加油 同为 pythoner 已 star
    lincanbin
        14
    lincanbin  
       2019-03-17 02:37:40 +08:00 via Android   ❤️ 3
    1 楼那个题目,考察的核心是尽量少的空间复杂度,因为操作的空间足够少,可以在 L1 cache 里完成,就会非常非常快……

    实际上应该先逐字母翻转( LeetCode Reverse String,从中点往两边扫描不停 swap ),然后再根据空格,针对每个单词再做一次 Reverse String 让单词还原回正确的顺序,这个操作还可以并行(不过 Python 因为 GIL 体验不到这个)。
    lincanbin
        15
    lincanbin  
       2019-03-17 02:43:18 +08:00 via Android   ❤️ 3
    考察算法的主要目的是性能优化,而不是得出解,不然我一个遍历大法岂不是 leetcode 无敌了?
    你的解跟其他人的解,占用了多少时钟周期心里要有个底……
    20015jjw
        16
    20015jjw  
       2019-03-17 05:57:54 +08:00 via Android
    lz 这个刷题态度没用的啊..
    做出来不代表做得好
    tony601818
        17
    tony601818  
       2019-03-17 07:49:00 +08:00
    这是研究 API 还是研究算法?
    codechaser
        18
    codechaser  
       2019-03-17 08:44:29 +08:00 via Android
    @lincanbin 怎么并行啊
    ivechan
        19
    ivechan  
       2019-03-17 09:45:49 +08:00
    @Qzier 那为啥不用 reversed 函数。
    darkTianTian
        20
    darkTianTian  
    OP
       2019-03-17 09:57:40 +08:00
    @20015jjw 看来有些面试官要求不同,我再优化一下。
    darkTianTian
        21
    darkTianTian  
    OP
       2019-03-17 09:59:09 +08:00
    @lincanbin 嗯,看来部分题还需要优化。。
    darkTianTian
        22
    darkTianTian  
    OP
       2019-03-17 10:14:11 +08:00
    @ivechan reversed 确实比[::-1]要好,我优化一下。
    JerryCha
        23
    JerryCha  
       2019-03-17 11:14:39 +08:00
    草,拿 C 写的心里不平衡了
    ipwx
        24
    ipwx  
       2019-03-17 11:19:28 +08:00
    @xupefei 我觉得如果你同时给这个方法和高性能的方法,我如果是面试官,我会很高兴。。。

    因为确实有可读性 > 性能的场景。
    iyaozhen
        25
    iyaozhen  
       2019-03-17 11:22:02 +08:00 via Android
    @JerryCha 放宽心,那种解法面试过不了的
    Justin13
        26
    Justin13  
       2019-03-17 11:39:56 +08:00 via Android
    说真的,刷算法还得上 C。
    亲身经历,因为当你需要算法时,就是追求最佳时间 /空间复杂度的时候。
    很多原生的方法性能并不好,虽然写起来很舒服但是没用。而 C 的版本就是最通用,性能最好的。
    @JerryCha
    darkTianTian
        27
    darkTianTian  
    OP
       2019-03-17 11:48:12 +08:00
    @ipwx 嗯,是,有时候确实要多写几种方法,搞不清他需要的是哪种。
    darkTianTian
        28
    darkTianTian  
    OP
       2019-03-17 11:50:09 +08:00
    @Justin13 你说的有道理,不过在 python 里面有些原生的方法是通过底层 C 优化过的,所以有的时候,拆开写反倒性能不好,虽然理论上时间复杂度更低。
    Justin13
        29
    Justin13  
       2019-03-17 12:47:49 +08:00 via Android
    @darkTianTian 但是你不知道哪些优化过,那些没有。而 C 的写法是最基础,也是最全面的。任何一个地方都在掌握之下。
    darkTianTian
        30
    darkTianTian  
    OP
       2019-03-17 12:49:44 +08:00
    @Justin13 嗯,不过觉得 C 太难了
    darknoll
        31
    darknoll  
       2019-03-17 16:19:56 +08:00
    做算法题怎么能用 python,肯定不可以的
    Lisanaaa
        32
    Lisanaaa  
       2019-03-17 16:46:44 +08:00
    重在思想,Python 也可以

    结构化算法刷题训练指南: https://xiaozhuanlan.com/Lisanaaa

    拿到题目首先干什么?关注哪些条件?怎么找到解题线索?怎么套已有模版?暴力解法是什么?写完暴力解法应该怎么优化?从哪些方面优化?优化后怎么总结?怎么编写自己的解题模版?

    经过上百篇文章的有序结构化刻意训练,你将拥有自己的一套解题体系,算法面试不再是你的短板!

    结构化算法刷题训练指南: https://xiaozhuanlan.com/Lisanaaa
    tinydebian
        33
    tinydebian  
       2019-03-18 21:42:25 +08:00
    楼主,我有些 Python 的工作需要请人帮助,你愿意吗?
    darkTianTian
        34
    darkTianTian  
    OP
       2019-03-18 23:57:18 +08:00
    @tinydebian 是什么样类型的工作呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5375 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:36 · PVG 17:36 · LAX 01:36 · JFK 04:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.