日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

191. 位 1 的个数 ●

發(fā)布時(shí)間:2024/1/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 191. 位 1 的个数 ● 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

191. 位 1 的個(gè)數(shù) ●

描述

編寫一個(gè)函數(shù),輸入是一個(gè)無符號整數(shù)(以二進(jìn)制串的形式),返回其二進(jìn)制表達(dá)式中數(shù)字位數(shù)為 ‘1’ 的個(gè)數(shù)(也被稱為漢明重量)。

示例

輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進(jìn)制串 00000000000000000000000000001011 中,共有三位為 ‘1’。

題解

1. 循環(huán)檢查二進(jìn)制位

直接循環(huán)檢查給定整數(shù) n 的二進(jìn)制位的每一位是否為 1。

具體的,從二進(jìn)制數(shù)低位到高位進(jìn)行檢查,每次移動(dòng) i ? 1 i- 1 i?1 位,并與 1 1 1 做 & 與運(yùn)算,來檢查第 i i i 低位的數(shù),

  • 時(shí)間復(fù)雜度: O ( k ) O(k) O(k),其中 k 是 int 型的二進(jìn)制位數(shù), k = 32 k=32 k=32。我們需要檢查 n 的二進(jìn)制位的每一位,一共需要檢查 32 位。
  • 空間復(fù)雜度: O ( 1 ) O(1) O(1),我們只需要常數(shù)的空間保存若干變量。
class Solution { public:int hammingWeight(uint32_t n) {int ans = 0;for(int i = 0; i < 32; ++i){if(n & 1){++ans; // 位移后,最低位為 1 時(shí),則ans++}n >>= 1; }return ans;} };

2. 位運(yùn)算優(yōu)化

觀察這個(gè)運(yùn)算: n & ( n ? 1 ) n~\&~(n - 1) n?&?(n?1),其運(yùn)算結(jié)果恰為把 n 的二進(jìn)制位中的最低位的 1 變?yōu)?0 之后的結(jié)果。

如: 6 & ( 6 ? 1 ) = 4 , 6 = ( 110 ) 2 , 4 = ( 100 ) 2 6~\&~(6-1) = 4, 6 = (110)_2, 4 = (100)_2 6?&?(6?1)=4,6=(110)2?,4=(100)2?,運(yùn)算結(jié)果 4 即為把 6 的二進(jìn)制位中的最低位的 1 變?yōu)?0 之后的結(jié)果。

這樣我們可以利用這個(gè)位運(yùn)算的性質(zhì)加速我們的檢查過程,在實(shí)際代碼中,我們不斷讓當(dāng)前的 n 與 n?1 做與運(yùn)算,直到 n 變?yōu)?0 即可。因?yàn)槊看芜\(yùn)算會(huì)使得 n 的最低位的 1 被翻轉(zhuǎn),因此運(yùn)算次數(shù)就等于 n 的二進(jìn)制位中 1 的個(gè)數(shù)。

  • 時(shí)間復(fù)雜度: O ( log ? n ) O(\log n) O(logn)。循環(huán)次數(shù)等于 n 的二進(jìn)制位中 1 的個(gè)數(shù),最壞情況下 n 的二進(jìn)制位全部為 1。
  • 空間復(fù)雜度: O ( 1 ) O(1) O(1),我們只需要常數(shù)的空間保存若干變量。
class Solution { public:int hammingWeight(uint32_t n) {int ans = 0;while(n){ // 還存在 1++ans;n &= n - 1; // 該操作后,最低位的 1 將被翻轉(zhuǎn)為 0}return ans;} };

總結(jié)

以上是生活随笔為你收集整理的191. 位 1 的个数 ●的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。