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

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

  •  
  •   syncher · 2017-04-10 21:33:23 +08:00 · 1816 次点击
    这是一个创建于 2803 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 输入: 任意三个整数(假设就在 0-1000 吧)
    • 输出: 三个数种的最大值.

    如输入 2 3 5
    输出 5

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

    8 条回复    2017-04-11 09:32:33 +08:00
    libook
        1
    libook  
       2017-04-10 22:09:04 +08:00
    不是大佬。

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

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

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

    就用 C 直接写,开编译优化,会变成 cmov ( conditional move )指令,应该够快的了
    ebony0319
        7
    ebony0319  
       2017-04-10 23:44:32 +08:00 via Android
    a>b?(a>c?a:c):(b>c?b:c)
    syncher
        8
    syncher  
    OP
       2017-04-11 09:32:33 +08:00 via Android
    @blahgeek 厉害了,感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   892 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:03 · PVG 05:03 · LAX 13:03 · JFK 16:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.