最大數值Java版(力扣)
阿新 • • 發佈:2021-01-04
編寫一個方法,找出兩個數字a和b中最大的那一個。不得使用if-else或其他比較運算子。
示例:
輸入: a = 1, b = 2
輸出: 2
題意:找出兩個數的最大值,不能使用if-else或其他比較運算子。
思路:利用數學公式
求絕對值時,為了不用系統的Math.abs(),我們自己寫一個:
long absolute(long a) {
int flag = (int) (a >> 63); //a為正數flag = 0,a為負數flag = -1
return (flag ^ a) - flag; //任何數與0異或值不變,任何數與-1異或等價於按位取反
}
正確程式碼:
class Solution {
long absolute(long a) {
int flag = (int) (a >> 63); //a為正數flag = 0,a為負數flag = -1
return (flag ^ a) - flag; //任何數與0異或值不變,任何數與-1異或等價於按位取反
}
public int maximum(int a, int b) {
long aa=a;
long bb=b;
int num=(int)((absolute(aa- bb)+aa+bb)/2);
return num;
}
}
完整程式碼(含測試程式碼):
package com.Keafmd.day0103;
/**
* Keafmd
*
* @ClassName: Maximum
* @Description: 最大數值
* @author: 牛哄哄的柯南
* @date: 2021-01-03 19:39
*/
public class Maximum {
public static void main(String[] args) {
Solution solution = new Solution ();
int a=8,b=-26;
int result = solution01032.maximum(a,b);
System.out.println(result);
}
}
class Solution {
long absolute(long a) {
int flag = (int) (a >> 63); //a為正數flag = 0,a為負數flag = -1
return (flag ^ a) - flag; //任何數與0異或值不變,任何數與-1異或等價於按位取反
}
public int maximum(int a, int b) {
long aa=a;
long bb=b;
int num=(int)((absolute(aa-bb)+aa+bb)/2);
return num;
}
}
輸出結果:
8
Process finished with exit code 0
看完如果對你有幫助,感謝點贊支援!
如果你是電腦端,看到右下角的 “一鍵三連” 了嗎,沒錯點它[哈哈]
加油!
共同努力!
Keafmd