编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。
示例:
输入: a = 1, b = 2
输出: 2
不使用if-else或其他比较运算符,没说不能使用内置函数,我们可以用 Java 的 Math.max(a,b) 方法直接获取答案。
时间复杂度:O(1)
空间复杂度:O(1)
class Solution {
public int maximum(int a, int b) {
return Math.max(a, b);
}
}
方法2:位运算
a - b 只有两种情况,正数和负数,正数表示 a 大,负数表示 b 大,因为正数移位最大位数后为 0,负数为 1,如果为正数,就是返回 a * 1 + b * 0,如果为负数,a * 0 + b * 1,就是移位后的数一个不变一个取反,取反用异或运算即可。
时间复杂度:O(1)
空间复杂度:O(1)
class Solution {
public int maximum(int a, int b) {
//差值移位
long sub = (long)a - (long)b >>> 63;
//返回计算后的结果
return (int)(a * (sub ^ 1) + b * sub);
}
}
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-lcci



