面试题 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 |
|