[NowCoder]无判断max

请编写一个方法,找出两个数字中最大的那个。条件是不得使用if-else等比较和判断运算符。给定两个int ab,请返回较大的一个数。若两数相同则返回任意一个。

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。

时间: 2024-10-25 12:48:46

[NowCoder]无判断max的相关文章

无判断max

题目描述 请编写一个方法,找出两个数字中最大的那个.条件是不得使用if-else等比较和判断运算符. 输入描述 给定两个int a和b 输出描述 请返回较大的一个数,若两数相同则返回任意一个. 输入样例 1,2 输出样例 2 分析 int c = (a - b) >> 31; 1) 当a >= b时,(a - b)符号位为0,(a - b)右移31位,高位补0,右移后的结果为0: 2) 当a < b时,(a - b)符号为-1,(a - b)右移31位,高位补0,右移后的结果为0:

php基础知识【函数】(9)数学和对象类函数

一.数学  abs -- 绝对值 ceil -- 进一法取整 floor -- 舍去法取整 fmod -- 返回除法的浮点数余数 round -- 对浮点数进行四舍五入 sqrt -- 平方根 pi()/M_PI  -- 得到圆周率值 is_nan -- 判断是否为合法数值 is_finite -- 判断是否为有限值 is_infinite -- 判断是否为无限值 max -- 找出最大值,max(num1,num2,num3... ),max (array(num1,num2,num3...)

python学习_day13___面试模拟真题讲解

一.选择题(32分) 1.python不支持的数据类型有:(A) A.char B.int C.float D.list 2.x = "foo" y = 2 print(x+y)                               (E) A.foo B.foofoo C.foo2 D.2 E.An exception is thrown 解释:不同数据类型不可以相加,但是字符串可以与数字相乘,以上例题若改为print(x*y),结果为B答案 3.关于字符串下列说法错误的是:(

C++ 程序设计基本概念 知识点 小结

[摘要] 知识点包括:全局变量的二次赋值:计算转化为二进制后,数字中 1 的数量:用一个非循环表达式判断一个数是否是2的N次方:逻辑运算与位逻辑运算:printf 输入表达式的执行顺序:位运算判断输入参数是否为2的幂次:位运算两个数值的取平均与求和:无判断语句求取变量中较大存在:无中间量交换变量:C/C++关系. [正文] 1. 赋值语句 考点:int i=i // 全局变量; 考点:与运算和按位与运算: 总结:== && ||属于逻辑运算符,返回值为bool值 #include <

leetcode 刷题之路 83 Maximum Subarray

Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [?2,1,?3,4,?1,2,1,?5,4], the contiguous subarray [4,?1,2,1] has the largest sum = 6. 输入一个整形数组,数组里有正数也有负数,求所有子数组的和的最大

python基础题

大家尽可能别把答案删掉自己做一遍 一定让初学者怀疑人生 一.选择题(32分)1.python不支持的数据类型有:(A) A.char B.int C.float D.list2.x = “foo” y = 2 print(x+y) (E) A.foo B.foofoo C.foo2 D.2 E.An exception is thrown 解释:不同数据类型不可以相加,但是字符串可以与数字相乘,以上例题若改为print(x*y),结果为B答案3.关于字符串下列说法错误的是:(B) A.字符应该视

Longest Consecutive Sequence

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43854597 Given an unsorted array of integers, find the length of the longest consecutive elements sequence. For example, Given [100, 4, 200, 1, 3, 2], The longest consecutive elemen

编程之美 2.14求数组的子数组之和的最大值

对于一个有N个元素的数组,a[0]~a[n-1],求子数组最大值. 如:数组A[] = [−2, 1, −3, 4, −1, 2, 1, −5, 4],则连续的子序列[4,−1,2,1]有最大的和6. 方法一:暴力 循环遍历,输出所有,判断最大的和 1 #include"iostream" 2 #define MAX 1001 3 using namespace std; 4 5 int main(){ 6 int n, a[MAX], sum , maxsum ; 7 8 cin &

辟谣网站能在中国活下来吗?辟谣网站能在中国活下来吗?

据<人民日报>报道,截止到今年8月,全国首个辟谣平台:北京地区网站联合辟谣平台已经成立两周年,辟谣总数量达到200万之巨,其中不乏一些救人民于水火的经典案例,目前,已经有45家网站加入辟谣行列,共同维护人民的合法权益,比如,2015年4月,网上流传出"草莓乙草胺超标,会引发癌症"的谣言,一时间,草莓价格先中国股市两个月进行了惨绝人寰的下跌,种植草莓的农民损失惨重,堪比中国散户,但随后辟谣平台联合相关农业部门,针对草莓进行了抽样检查,发现全国各地200余样品均无超标现象,而专