说几个 leetcode 上看似简单却又非常困难的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Goldilocks
V2EX    算法

说几个 leetcode 上看似简单却又非常困难的问题

  •  1
     
  •   Goldilocks 2020 年 11 月 10 日 4285 次点击
    这是一个创建于 1901 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. Merge two sorted array

    https://leetcode.com/problems/merge-sorted-array/

    Q1: 算法复杂度的下界是多少?如何算出来的?/p>

    Q2: 常规两个指针线性的往前走谁都会写,但是如何 binary search 加速它?aka. binary search merge

    1. Shuffle the Array

    https://leetcode.com/problems/shuffle-the-array

    如何 inplace 的在线性的时间复杂度完成它?如何证明你的算法是对的?

    这个题其实是在考察你对抽象代数的理解。因为这个所谓的 shuffle 就是 permutation 。permutation group 可以被分解成 orbits 。然后你就只需要一个 orbit 、一个 orbit 的去处理就行了。但是如何找出这些 orbits 呢?能不能同时处理多个 orbits 呢?

    1. Running Sum of 1d Array https://leetcode.com/problems/running-sum-of-1d-array/

    看起来很简单是吧? 如果是浮点数怎么办?如何利用 binary tree 最小化计算误差?

    1. find the median number of an array

    《算法导论》花了很大的篇幅去讲这个问题,没有认真学过的人肯定是不懂的,尤其是那个最坏情况为线性时间的选择算法,为什么《算法导论》上是每 5 个一组但是 TAOCP 上的描述是 7 个一组?除了这些 textbook 算法外,你还有什么 idea ?比如如何用概率论和统计学知识开发一个期望线性的随机化算法?

    一味的刷题是没有用的,对于找到这些 easy 问题的答案没有帮助。

    同时这也回答了另一个问题:面试的时候怎么判断面试者是不是速成的? 很简单,认真学过算法的科班学生,多少会对这些问题有些 sense 。而速成的只能靠刷题,刷不出这些 idea 。他甚至不知道 binary search merge 的存在。但是如果他但凡看过 MIT 、普林斯顿或任何一个名校的算法公开课,他都会知道 binary merge/median find 不是那么的简单的问题。

    16 条回复    2021-06-20 19:46:35 +08:00
    Girlphobia
        1
    Girlphobia  
       2020 年 11 月 10 日   1
    坚定了我有空一定要把垫显示器的《算法导论》拿出来仔细看一遍的决心。
    daozhihun
        2
    daozhihun  
       2020 年 11 月 10 日
    如果你只是想要知道别人是否认真学过算法,直接出个题目考网络流算法、A*搜索剪枝不是更好吗?
    我觉得面试的目的是考察对方的思维能力,而不是单纯地判断他是否看过哪些公开课什么的。
    lights
        3
    lights  
       2020 年 11 月 10 日 via iPhone
    这是要造火箭还是造无人汽车啊
    GtDzx
        4
    GtDzx  
       2020 年 11 月 10 日
    binary search merge 是啥? 怎么加速的? 还真没听说过...
    SingeeKing
        5
    SingeeKing  
    PRO
       2020 年 11 月 10 日 via iPhone
    @GtDzx 简单说就是楼主列举的第一题的 O(logN) 解法
    GtDzx
        6
    GtDzx  
       2020 年 11 月 10 日
    @SingeeKing 这题至少要把 2 个数组遍历一遍吧,还能 O(logN)? 讲讲怎么做?
    levelworm
        7
    levelworm  
       2020 年 11 月 12 日
    @Girlphobia 当初看了几页就放弃了,感觉还是红色那本舒服一点。不过我觉得还是从项目中寻找问题比较好。。。否则看完也忘记了。
    Sevenskey
        8
    Sevenskey  
       2020 年 12 月 6 日
    @SingeeKing 呃,这题最优解是 o(m+n)啦,没有 log 的解法
    Goldilocks
        9
    Goldilocks  
    OP
       2020 年 12 月 7 日
    @Sevenskey 你能证明它至少需要 o(m+n)次比较吗?不能啊。
    Sevenskey
        10
    Sevenskey  
       2020 年 12 月 18 日
    @Goldilocks 。。那你能证明它在某种算法下最多只需要 log(m+n)的比较吗
    e583409
        11
    e583409  
       2021 年 1 月 3 日
    我理解 刷题的目很多人没有搞懂 为了数量 而不是质量 为了刷题而刷题
    这个是我的答案 https://github.com/xrfinbupt/leetcode_java
    Goldilocks
        12
    Goldilocks  
    OP
       2021 年 1 月 3 日 via Android
    二路归并,其实是在问,如果你把 m 个排好序的数字插入到另外 n 个排好序的数组中,那么那 m 个数的 position 有多少种可能性?
    然后再回过头来,基于比较的排序,为什么下界是 nlogn ?
    把这两个问题的答案结合起来,就可以得知二路归并的算法复杂度下界。
    Goldilocks
        13
    Goldilocks  
    OP
       2021 年 1 月 3 日 via Android
    举个例子,当 m 等于 1,那么显然共有 n+1 种可能性。用 log ( n+1 )次比较就能解决问题
    Sevenskey
        14
    Sevenskey  
       2021 年 1 月 10 日
    @Goldilocks 啊这,那你这复杂度不是 log(n+m)而是 mlogn 啊。。另外大 o 记号是表示上界的
    Goldilocks
        15
    Goldilocks  
    OP
       2021 年 1 月 10 日
    @Sevenskey 我自始自终就没说过 log(n+m)啊。而且也不是 mlogn 。我甚至连大 O 都没有提过。对于这样的简单问题,大 O 太粗糙了。大 O 是上界,所以要看谁能找到更精确的上界中的下界。
    e583409
        16
    e583409  
       2021 年 6 月 20 日
    @e583409 不知不觉 用半年 刷了 178 道题
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     943 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 19:49 PVG 03:49 LAX 11:49 JFK 14:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86