首页 > 代码库 > [NowCoder]无判断max
[NowCoder]无判断max
请编写一个方法,找出两个数字中最大的那个。条件是不得使用if-else等比较和判断运算符。给定两个int a和b,请返回较大的一个数。若两数相同则返回任意一个。
import java.util.*; public class Max { public int getMax(int a, int b) { return (a + b + Math.abs(a - b)) / 2; } }
import java.util.*; public class Max { public int getMax(int a, int b) { int r = a - b; r = r >> 31; return a + r*(a - b); } }
思路1:
a和b的差的绝对值是abs(a - b),然后差的绝对值加上a和b的和即为最大值的两倍。同理求两数较小的一个,a + b - abs(a - b)即可。
思路2:
c = (a-b)>>31
(1)当a>=b时,(a-b)符号位为0,(a-b)右移31位,高位补0,右移后的结果为0;
(2)当a<b时,(a-b)符号位为1,(a-b)右移31位,高位补1,故右移后的结果不是 我们想当然的1,而是-1。
a+c*(a-b)
(1)当c=0时,说明a>=b,a+c*(a-b)=a,返回a;
(2)当c=-1时,说明a<b,a+c*(a-b)=a-(a-b)=b,返回b。
[NowCoder]无判断max
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。