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

2017-04-10 21:33:23 +08:00
 syncher

如输入 2 3 5
输出 5

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

1713 次点击
所在节点    问与答
8 条回复
libook
2017-04-10 22:09:04 +08:00
不是大佬。

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

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

工作几年后的观念是代码可读性最重要,所以会根据实际的需求场景设计可读性最高最容易理解的算法。
Arthur2e5
2017-04-10 22:27:54 +08:00
连着用两发 max 呀。安慰自己说编译器喜欢把三元运算符变成不带分支的条件转移语句,比 if 来得快就可以了。(其实编译器动动脑筋就把 if 给优化了……)
billlee
2017-04-10 22:35:07 +08:00
std::max({a, b, c})
Mutoo
2017-04-10 22:57:14 +08:00
var max = Math.max(Math.max(a, b), c);
qinix
2017-04-10 23:04:26 +08:00
```ruby
[a, b, c].max
```
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
2017-04-10 23:44:32 +08:00
a>b?(a>c?a:c):(b>c?b:c)
syncher
2017-04-11 09:32:33 +08:00
@blahgeek 厉害了,感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/353915

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX