LintCode解題筆記 將整數A轉換為B

2021-07-03 18:12:01 字數 661 閱讀 4492

如果要將整數a轉換為b,需要改變多少個bit位?

樣例 如把31轉換為14,需要改變2個bit位。

(31)10=(11111)2

(14)10=(01110)2

思路1:

從低位到高位依次比較a,b對應位置的二進位制值,如何才能依次比較?a,b又不是一二進位制的形式存成字串。 我們需要有一種方法,能每次僅取到特定位置的二進位制數值,使用不斷除2取餘的方法,可以構建二進位制。但這種二進位制只能表示整數,負數的二進位制是一補碼形式表示。補碼的意思是對應正數的二進位制,取反後加1

關於補碼知識可以參考(

既然單純除2的方法無法得到負數對應的二進位制表示,那麼我們考慮引入乙個我們可以控制的變數flag,flag從1開始,每次運算之後左移1位, 也就是10,100,1000,等等。知道1超過32位或64位,flag變成0。

我們將a,b 分別於flag進行與(&)運算,與運算定義是,只有運算雙方都為1時候,結果才為1. a & flag, 運算結果是a[i]=1時候,結果為1, a[i]=0時候,結果為0。b[i]的運算性質和a[i]一致。因此通過比較a & flag 和 b & flag, 可以得到對應位數的值是否相同。

class

solution

return change;

}};

lintcode 將整數A轉換為B

利用位運算 class solution return count 總耗時 2834 ms 利用位運算 與減法 class solution return count 總耗時 2366 ms 取一位判斷一位 class solution return count 總耗時 2103 ms 下面是自己寫...

Lintcode解題報告

1.num.196 尋找缺失的數 給出乙個包含 0 n 中 n 個數的序列,找出0 n 中沒有出現在序列中的那個數。注意事項 可以改變序列中數的位置。您在真實的面試中是否遇到過這個題?yes樣例n 4且序列為 0,1,3 時,缺失的數為2。1.可以1 n 1求和再減去陣列中數字的總和,差值即為缺失的...

LintCode解題筆記 連續子陣列求和

給定乙個整數陣列,請找出乙個連續子陣列,使得該子陣列的和最大。輸出答案時,請分別返回第乙個數字和最後乙個數字的值。如果兩個相同的答案,請返回其中任意乙個 樣例 給定 3,1,3,3,4 返回 1,4 分析 使用start和end來定位a中最大子陣列開始和結束的位置 方法一 暴力遍歷的方式,兩層for...