先放上驚訝到我的好像比較常用的一種解法:
例:001000,
對該串-1:000111;
兩串相與:000000。
多位以此類推。
即對x[n],count = 0,
while(x !=0)
設有m個1,此種解法時間複雜度為o(m);
個人解法思路:
對x[n], y = x[0 ~ (n-1)/2] | x[n/2 ~ (n-1)], z = ~(x[0 ~ (n-1)/2] ^ x[n/2 ~ (n-1)]),
y表示兩半共有多少個不同位置的1,y^z表示兩半每個位置上的數是否相同,固有:
count = 0,
for(i = 0; i < n/2; i++)
時間複雜度為o(n/2)。
在m <= n/2的時候前一種比較效率,反之後一種複雜度低。
當然,個人解法只是邏輯思路,暫且不知道實現難度如何,甚至有可能實現不出來,這就是後話了,暫且將臨時想到的東西記錄於此,如有錯誤或建議,還請讀者不吝批評指教。
求二進位制中1的個數
在 程式設計之美 一書中有一節提到如何求乙個位元組的無符號整型變數二進位制表示中中1的個數,主要提到了四種方法。下面簡單介紹一下 1.求餘法 在將十進位制數轉換為二進位制數時,採用除2取餘法。將每次除2得到的餘數儲存起來逆序輸出便是該十進位制整數的二進位制表示。因此可以採用這種方法去統計1的個數。i...
求二進位制中1的個數
解法有很多種 以乙個位元組無符號位元組變數作為例子 解法一 求餘法 在將十進位制數轉換為二進位制數時,採用除2取餘法。將每次除2得到的餘數儲存起來逆序輸出便是該十進位制整數的二進位制表示。因此可以採用這種方法去統計1的個數。public int count byte n return sum 解法二...
求二進位制中1的個數
這是乙個經常會在筆試和面試中遇到的題目,今天我做到了這個題目,就來分享一下我對這個題目的解決思路。首先拿到這個題目,我們的基本思路是 先判斷最後一位是否為1,接著把數字依次右移,判斷每一位是否為1,直到整數變為0為止。基於這個思路我們可以寫下如下的 int count int n n n 1 ret...