【全球報資訊】#yyds干貨盤點# LeetCode程序員面試金典:下一個數

2022-12-29 19:26:47 來源:51CTO博客


(資料圖)

題目:

下一個數。給定一個正整數,找出與其二進制表達式中1的個數相同且大小最接近的那兩個數(一個略大,一個略小)。

示例1:

輸入:num = 2(或者0b10) 輸出:[4, 1] 或者([0b100, 0b1])

示例2:

輸入:num = 1 輸出:[2, -1]

代碼實現:

class Solution {    public int[] findClosedNumbers(int num) {        int[] res =  new int[2];        if (num <=0 || num>=Integer.MAX_VALUE) {            res[0] = -1;            res[1] = -1;        } else {            res[0] = getNext(num);            res[1] = getPrev(num);        }        return res;    }        // 取得后一個較大的數    private int getNext(int n) {        // 計算c0和c1,用于找到最右邊非拖尾0的下標p        int c = n;        int c0 = 0;        int c1 = 0;        while (((c&1)==0)&&(c!=0)) {            c0++;            c >>= 1;        }        while ((c&1)==1) {            c1++;            c >>= 1;        }                // 錯誤:若n=111111...000, 那么就沒有更大的數字        // 如果是n的二進制不存在可翻轉的0,或者n就是0        if (c0 + c1 == 31 || c0 +c1 ==0) {            return -1;        }                int p = c0+c1; // 前提:最右邊,非拖尾0的位置        n |= (1<                

標簽: 那兩個數

上一篇:【世界速看料】#yyds干貨盤點# LeetCode程序員面試金典:整數轉換
下一篇:環球信息:elastic-job2.1.5版本全量查詢JOB_STATUS_TRACE_LOG的問題