syncher
V2EX  ›  问与答

简单问题求优质答案, 问各位大佬您是如何求三个数中的最大数?

  •  
  •   syncher · Apr 10, 2017 · 2709 views
    This topic created in 3497 days ago, the information mentioned may be changed or developed.
    • 输入: 任意三个整数(假设就在 0-1000 吧)
    • 输出: 三个数种的最大值.

    如输入 2 3 5
    输出 5

    看似很简单的问题, 但总感觉应该有一些奇妙的算法, 就像交换个数一样可以使用位运算也可以不用临时变量直接交换, 所以问各位有没有什么巧妙的方法求三个数中的最大数?

    8 replies  •  2017-04-11 09:32:33 +08:00
    libook
    libook
    Apr 10, 2017
    1
    不是大佬。

    如果是刚毕业的话我会说 O 复杂度冒泡。

    但工程上我会用两次判断语句,不需要额外的变量和循环,因为是已知固定 3 个数字,空间复杂度和时间复杂度或最低。

    工作几年后的观念是代码可读性最重要,所以会根据实际的需求场景设计可读性最高最容易理解的算法。
    Arthur2e5
    Arthur2e5
    Apr 10, 2017
    2
    连着用两发 max 呀。安慰自己说编译器喜欢把三元运算符变成不带分支的条件转移语句,比 if 来得快就可以了。(其实编译器动动脑筋就把 if 给优化了……)
    billlee
    billlee
    Apr 10, 2017
    3
    std::max({a, b, c})
    Mutoo
    Mutoo
    Apr 10, 2017
    4
    var max = Math.max(Math.max(a, b), c);
    qinix
    qinix
    Apr 10, 2017 via iPhone
    5
    ```ruby
    [a, b, c].max
    ```
    blahgeek
    blahgeek
    Apr 10, 2017
    6
    https://stackoverflow.com/questions/2039730/fastest-way-to-find-out-minimum-of-3-numbers

    就用 C 直接写,开编译优化,会变成 cmov ( conditional move )指令,应该够快的了
    ebony0319
    ebony0319
    Apr 10, 2017 via Android
    7
    a>b?(a>c?a:c):(b>c?b:c)
    syncher
    syncher
    OP
    Apr 11, 2017 via Android
    8
    @blahgeek 厉害了,感谢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   962 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 19:25 · PVG 03:25 · LAX 11:25 · JFK 14:25
    ♥ Do have faith in what you're doing.