- 输入: 任意三个整数(假设就在 0-1000 吧)
- 输出: 三个数种的最大值.
如输入 2 3 5
输出 5
看似很简单的问题, 但总感觉应该有一些奇妙的算法, 就像交换个数一样可以使用位运算也可以不用临时变量直接交换, 所以问各位有没有什么巧妙的方法求三个数中的最大数?
如输入 2 3 5
输出 5
看似很简单的问题, 但总感觉应该有一些奇妙的算法, 就像交换个数一样可以使用位运算也可以不用临时变量直接交换, 所以问各位有没有什么巧妙的方法求三个数中的最大数?
|
libookApr 10, 2017
1
不是大佬。
如果是刚毕业的话我会说 O 复杂度冒泡。 但工程上我会用两次判断语句,不需要额外的变量和循环,因为是已知固定 3 个数字,空间复杂度和时间复杂度或最低。 工作几年后的观念是代码可读性最重要,所以会根据实际的需求场景设计可读性最高最容易理解的算法。 |
|
Arthur2e5Apr 10, 2017
2
连着用两发 max 呀。安慰自己说编译器喜欢把三元运算符变成不带分支的条件转移语句,比 if 来得快就可以了。(其实编译器动动脑筋就把 if 给优化了……)
|
|
billleeApr 10, 2017
3
std::max({a, b, c})
|
|
MutooApr 10, 2017
4
var max = Math.max(Math.max(a, b), c);
|
|
qinixApr 10, 2017 via iPhone
5
```ruby
[a, b, c].max ``` |
|
blahgeekApr 10, 2017
6
https://stackoverflow.com/questions/2039730/fastest-way-to-find-out-minimum-of-3-numbers
就用 C 直接写,开编译优化,会变成 cmov ( conditional move )指令,应该够快的了 |
|
ebony0319Apr 10, 2017 via Android
7
a>b?(a>c?a:c):(b>c?b:c)
|