简单-LeetCode 面试题 16.07最大数值

题目

来源:最大数值
编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。

示例

在这里插入图片描述

解题思路及代码
1.思路

采用求平均值法:max(a,b) = ((a + b) + Math.abs(a - b)) / 2
重点是如何实现求abs(a - b)。提供位运算思路。

2. 代码

方法1

var maximum = function(a, b) {
    return ((a + b) + Math.abs(a - b)) / 2; 
 };

方法2

var maximum = function(a, b) {
   var k = ((a - b) >>> 63) & 1;
   var aSign = a >>> 63;
   var bSign = b >>> 63;       //  >>> 无符号右移,负数最高位符号以0填充     >>  负数最高位以1填充
   var diff = aSign ^ bSign;
    k = k * (diff ^ 1) | aSign & diff;
    return b * k + a * (k ^ 1);
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值