1. 程式人生 > 其它 >最大數值Java版(力扣)

最大數值Java版(力扣)

技術標籤:位運算leetcode

最大數值

編寫一個方法,找出兩個數字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