首页 > 试题广场 >

无判断max

[编程题]无判断max
  • 热度指数:8607 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定int a和intb,在不使用if-else等比较和判断运算符的情况下返回较大的那个数。若两数相同则返回任意一个。

测试样例:
1,2
返回:2
推荐
public int getMax(int a ,int b){
    b = a-b;//此时b>>31为1则b小于0即a<b,若b>>31为0 则a>b
    a- = b&(b>>31); //若a<b a=a-(a-b),若a>b a=a-0  
    return a;
}
类似交换两个数大小
public int[2] exchangeNum(int[2] num){
    num[1] = num[0]-num[1];
    num[0] = num[0]-num[1];
    num[1] = num[0]+num[1];
    return num;
}

编辑于 2015-08-16 16:25:18 回复(21)
return sorted([a,b])[-1]
编辑于 2021-03-19 12:08:37 回复(0)
# -*- coding:utf-8 -*-
class Max:
    def getMax(self, a, b):
        # (a - b) >> 31 为 0, 说明 a - b 最高位为0,即a >=b
        # (a - b) >> 31 为 -1, 说明 a - b 最高位为1, 即 a < b
        return {0:a,-1:b}[(a-b)>>31]

发表于 2016-08-09 11:46:22 回复(0)

问题信息

难度:
2条回答 18433浏览

热门推荐

通过挑战的用户

查看代码