编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。
方法一 无赖法
直接用 Math.max(a,b)返回最大值
class Solution {
public int maximum(int a, int b) {
return Math.max(a,b);
}
}
方法二 符号位法
先获取a b强转为long类型的值之后的数
然后又用获取之后的数进行相减得到应该long类型的数
再将long类型的数向右位移63位得到符号位
将得到的符号位强转为ing类型数 即 0或 -1 (方便返回)
若为0则 输出a 为-1则输出b
class Solution {
public int maximum(int a, int b) {
long c= (long) a;
long d=(long) b;
long x = c - d;
int k = (int) (x >> 63);
return (1 + k) * a - b * k;
}
}
方法三 数学思维绝对值法
Max(a,b)=(|a-b|+a+b)/2
先将a b转化为long类型数值
这样进行加减的时候就不会出现数值越界问题
class Solution {
public int maximum(int a, int b) {
long c = a;
long d = b;
int res = (int) ((Math.abs(c-d) + c + d)/2);
return res;
}