如输入 2 3 5
输出 5
看似很简单的问题, 但总感觉应该有一些奇妙的算法, 就像交换个数一样可以使用位运算也可以不用临时变量直接交换, 所以问各位有没有什么巧妙的方法求三个数中的最大数?
1
libook 2017-04-10 22:09:04 +08:00
不是大佬。
如果是刚毕业的话我会说 O 复杂度冒泡。 但工程上我会用两次判断语句,不需要额外的变量和循环,因为是已知固定 3 个数字,空间复杂度和时间复杂度或最低。 工作几年后的观念是代码可读性最重要,所以会根据实际的需求场景设计可读性最高最容易理解的算法。 |
2
Arthur2e5 2017-04-10 22:27:54 +08:00
连着用两发 max 呀。安慰自己说编译器喜欢把三元运算符变成不带分支的条件转移语句,比 if 来得快就可以了。(其实编译器动动脑筋就把 if 给优化了……)
|
3
billlee 2017-04-10 22:35:07 +08:00
std::max({a, b, c})
|
4
Mutoo 2017-04-10 22:57:14 +08:00
var max = Math.max(Math.max(a, b), c);
|
5
qinix 2017-04-10 23:04:26 +08:00 via iPhone
```ruby
[a, b, c].max ``` |
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 )指令,应该够快的了 |
7
ebony0319 2017-04-10 23:44:32 +08:00 via Android
a>b?(a>c?a:c):(b>c?b:c)
|