国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

算法:二進制中 1 的個數(shù)

2022-06-29 10:16 作者:做架構師不做框架師  | 我要投稿


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

示例1

  • 輸入:n = 11 (控制臺輸入 00000000000000000000000000001011)

  • 輸出:3

  • 解釋:輸入的二進制串 00000000000000000000000000001011 中,共有三位為 '1'。

示例2

  • 輸入:n = 4294967293 (控制臺輸入 11111111111111111111111111111101,部分語言中 n = -3)

  • 輸出:31

  • 解釋:輸入的二進制串 11111111111111111111111111111101 中,共有 31 位為 '1'。

提示

  • 請注意,在某些語言(如 Java)中,沒有無符號整數(shù)類型。在這種情況下,輸入和輸出都將被指定為有符號整數(shù)類型,并且不應影響您的實現(xiàn),因為無論整數(shù)是有符號的還是無符號的,其內部的二進制表示形式都是相同的。

  • 在 Java 中,編譯器使用 二進制補碼 記法來表示有符號整數(shù)。因此,在上面的 示例 2 中,輸入表示有符號整數(shù) -3。

  • 輸入必須是長度為 32 的 二進制串 。

方法一:逐位判斷

根據(jù) 與運算 定義,設二進制數(shù)字 n ,則有:

  • 若 n&1=0 ,則 n 二進制 最右一位 為 0 ;

  • 若 n&1=1 ,則 n 二進制 最右一位 為 1 。

根據(jù)以上特點,考慮以下 循環(huán)判斷 :

  • 判斷 n 最右一位是否為 1 ,根據(jù)結果計數(shù)。

  • 將 n 右移一位(本題要求把數(shù)字 n 看作無符號數(shù),因此使用 無符號右移 操作)。

代碼如下:

復雜度分析

  • 時間復雜度: O(log 以 2 為底 n的對數(shù)) ,此算法循環(huán)內部僅有 移位、與、加 等基本運算,占用 O(1) ;逐位判斷需循環(huán) log 以 2 為底 n的對數(shù) 次,其中 log 以 2 為底 n的對數(shù) 代表數(shù)字 n 最高位 1 的所在位數(shù)。

  • 空間復雜度: O(1) ,變量 ret 使用常數(shù)大小的額外空間。

方法二:位運算優(yōu)化

  • (n - 1) 解析: 二進制數(shù)字 n 最右邊的 1 變成 0 ,此 1 右邊的 0 都變成 1 。

  • n&(n?1) 解析: 二進制數(shù)字 n 最右邊的 1 變成 0 ,其余不變。

代碼如下:

復雜度分析

  • 時間復雜度: O(M),n&(n?1) 操作僅有減法和與運算,占用 O(1) ;設 M 為二進制數(shù)字 n 中 1 的個數(shù),則需循環(huán) M 次(每輪消去一個 1 ),占用 O(M) 。

  • 空間復雜度: O(1),變量 ret 使用常數(shù)大小額外空間。

END

本文內容出處是力扣官網(wǎng),希望和大家一起刷算法,在后面的路上不變禿但是變強!

好兄弟可以點贊并關注我的公眾號“javaAnswer”,全部都是干貨。


算法:二進制中 1 的個數(shù)的評論 (共 條)

分享到微博請遵守國家法律
垫江县| 兴城市| 安化县| 翁牛特旗| 新泰市| 济源市| 昂仁县| 仙居县| 宜城市| 牙克石市| 高唐县| 垣曲县| 左云县| 元阳县| 三明市| 西吉县| 潮安县| 响水县| 丹阳市| 桃园县| 神农架林区| 沁源县| 璧山县| 张北县| 荣成市| 永德县| 汾西县| 民权县| 江华| 海安县| 公安县| 南华县| 平武县| 清原| 溧阳市| 大冶市| 岑溪市| 连云港市| 安化县| 无锡市| 仪征市|