面试题 16.07. 最大数值
题目描述
编写一个方法,找出两个数字a
和b
中最大的那一个。不得使用if-else或其他比较运算符。
示例:
输入: a = 1, b = 2 输出: 2
解法
方法一:位运算
我们可以提取 \(a-b\) 的符号位 \(k\),如果符号位为 \(1\),说明 \(a \lt b\);如果符号位为 \(0\),说明 \(a \ge b\)。
那么最后的结果就是 \(a \times (k \oplus 1) + b \times k\)。
时间复杂度 \(O(1)\),空间复杂度 \(O(1)\)。
1 2 3 4 |
|
1 2 3 4 5 6 |
|
1 2 3 4 5 6 7 |
|
1 2 3 4 |
|
1 2 3 4 |
|
1 2 3 4 5 6 7 |
|