中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

1免費(fèi)做網(wǎng)站seo搜索引擎優(yōu)化人才

1免費(fèi)做網(wǎng)站,seo搜索引擎優(yōu)化人才,做視頻的網(wǎng)站,網(wǎng)站被模仿如何維權(quán)本文屬于「征服LeetCode」系列文章之一,這一系列正式開始于2021/08/12。由于LeetCode上部分題目有鎖,本系列將至少持續(xù)到刷完所有無鎖題之日為止;由于LeetCode還在不斷地創(chuàng)建新題,本系列的終止日期可能是永遠(yuǎn)。在這一系列刷題文章…

本文屬于「征服LeetCode」系列文章之一,這一系列正式開始于2021/08/12。由于LeetCode上部分題目有鎖,本系列將至少持續(xù)到刷完所有無鎖題之日為止;由于LeetCode還在不斷地創(chuàng)建新題,本系列的終止日期可能是永遠(yuǎn)。在這一系列刷題文章中,我不僅會講解多種解題思路及其優(yōu)化,還會用多種編程語言實現(xiàn)題解,涉及到通用解法時更將歸納總結(jié)出相應(yīng)的算法模板。

為了方便在PC上運(yùn)行調(diào)試、分享代碼文件,我還建立了相關(guān)的倉庫:https://github.com/memcpy0/LeetCode-Conquest。在這一倉庫中,你不僅可以看到LeetCode原題鏈接、題解代碼、題解文章鏈接、同類題目歸納、通用解法總結(jié)等,還可以看到原題出現(xiàn)頻率和相關(guān)企業(yè)等重要信息。如果有其他優(yōu)選題解,還可以一同分享給他人。

由于本系列文章的內(nèi)容隨時可能發(fā)生更新變動,歡迎關(guān)注和收藏征服LeetCode系列文章目錄一文以作備忘。

給你一個整數(shù)?n?,對于?0 <= i <= n?中的每個?i?,計算其二進(jìn)制表示中?1?的個數(shù)?,返回一個長度為?n + 1?的數(shù)組?ans?作為答案。

示例 1:

輸入:n = 2
輸出:[0,1,1]
解釋:
0 --> 0
1 --> 1
2 --> 10

示例 2:

輸入:n = 5
輸出:[0,1,1,2,1,2]
解釋:
0 --> 0
1 --> 1
2 --> 10
3 --> 11
4 --> 100
5 --> 101

提示:

  • 0 <= n <= 10^5

進(jìn)階:

  • 很容易就能實現(xiàn)時間復(fù)雜度為?O(n log n)?的解決方案,你可以在線性時間復(fù)雜度?O(n)?內(nèi)用一趟掃描解決此問題嗎?
  • 你能不使用任何內(nèi)置函數(shù)解決此問題嗎?(如,C++ 中的?__builtin_popcount?)

這道題需要計算從 0 0 0 n n n 的每個整數(shù)的二進(jìn)制表示中的 1 1 1 的數(shù)目。

部分編程語言有相應(yīng)的內(nèi)置函數(shù)用于計算給定的整數(shù)的二進(jìn)制表示中的 1 1 1 的數(shù)目,例如 Java 的 Integer.bitCount ,C++ 的 __builtin_popcount 。下列各種方法均為不使用內(nèi)置函數(shù)的解法。

為了表述簡潔,下文用「一比特數(shù)」表示二進(jìn)制表示中的 1 1 1 的數(shù)目。


解法1 B r i a n K e r n i g h a n Brian Kernighan BrianKernighan 算法

最直觀的做法是對從 0 0 0 n n n 的每個整數(shù)直接計算「一比特數(shù)」。每個int型的數(shù)都可以用 32 32 32 位二進(jìn)制數(shù)表示,只要遍歷其二進(jìn)制表示的每一位即可得到 1 1 1 的數(shù)目。

利用 Brian?Kernighan 算法,可以在一定程度上進(jìn)一步提升計算速度。該算法的原理是:對于任意整數(shù) x x x ,令 x = x & ( x ? 1 ) x=x~\&~(x-1) x=x?&?(x?1) ,該運(yùn)算將 x x x 的二進(jìn)制表示的最后一個 1 1 1 變成 0 0 0 。因此,對 x x x 重復(fù)該操作,直到 x x x 變成 0 0 0 ,則操作次數(shù)即為 x x x 的「一比特數(shù)」。

對于給定的 n n n,計算從 0 0 0 n n n 的每個整數(shù)的「一比特數(shù)」的時間都不會超過 O ( log ? n ) O(\log n) O(logn) ,因此總時間復(fù)雜度為 O ( n log ? n ) O(n \log n) O(nlogn) 。

class Solution {public int[] countBits(int n) {int[] bits = new int[n + 1];for (int i = 0; i <= n; i++) bits[i] = countOnes(i);return bits;}public int countOnes(int x) {int ones = 0;while (x > 0) {x &= (x - 1);ones++;}return ones;}
}

復(fù)雜度分析:

  • 時間復(fù)雜度: O ( n log ? n ) O(n \log n) O(nlogn) 。需要對從 0 0 0 n n n 的每個整數(shù)使用計算「一比特數(shù)」,對于每個整數(shù)計算「一比特數(shù)」的時間都不會超過 O ( log ? n ) O(\log n) O(logn) 。
  • 空間復(fù)雜度: O ( 1 ) O(1) O(1) 。除了返回的數(shù)組以外,空間復(fù)雜度為常數(shù)。

解法2 動態(tài)規(guī)劃——最高有效位

方法一需要對每個整數(shù)使用 O ( log ? n ) O(\log n) O(logn) 的時間計算「一比特數(shù)」??梢該Q一個思路,當(dāng)計算 i i i 的「一比特數(shù)」時,如果存在 0 ≤ j < i 0 \le j<i 0j<i j j j 的「一比特數(shù)」已知,且 i i i j j j 相比, i i i 的二進(jìn)制表示只多了一個 1 1 1 ,則可以快速得到 i i i 的「一比特數(shù)」。令 bits [ i ] \textit{bits}[i] bits[i] 表示 i i i 的「一比特數(shù)」,則上述關(guān)系可以表示成: bits [ i ] = bits [ j ] + 1 \textit{bits}[i]= \textit{bits}[j]+1 bits[i]=bits[j]+1

對于正整數(shù) x x x如果可以知道最大的正整數(shù) y y y ,使得 y ≤ x y \le x yx y y y 2 2 2 的整數(shù)次冪,則 y y y 的二進(jìn)制表示中只有最高位是 1 1 1 ,其余都是 0 0 0,此時稱 y y y x x x 的「最高有效位」。令 z = x ? y z=x-y z=x?y ,顯然 0 ≤ z < x 0 \le z<x 0z<x ,則 bits [ x ] = bits [ z ] + 1 \textit{bits}[x]=\textit{bits}[z]+1 bits[x]=bits[z]+1 。

為了判斷一個正整數(shù)是不是 2 2 2 的整數(shù)次冪,可以利用方法一中提到的按位與運(yùn)算的性質(zhì)。如果正整數(shù) y y y 2 2 2 的整數(shù)次冪,則 y y y 的二進(jìn)制表示中只有最高位是 1 1 1,其余都是 0 0 0,因此 y & ( y ? 1 ) = 0 y~\&~(y-1) = 0 y?&?(y?1)=0 。由此可見,正整數(shù) y y y 2 2 2 的整數(shù)次冪,當(dāng)且僅當(dāng) y & ( y ? 1 ) = 0 y~\&~(y-1)=0 y?&?(y?1)=0

顯然, 0 0 0 的「一比特數(shù)」為 0 0 0 。使用 highBit \textit{highBit} highBit 表示當(dāng)前的最高有效位,遍歷從 1 1 1 n n n 的每個正整數(shù) i i i,進(jìn)行如下操作。

  • 如果 i & ( i ? 1 ) = 0 i~\&~(i-1)=0 i?&?(i?1)=0 ,則令 highBit = i \textit{highBit}=i highBit=i ,更新當(dāng)前的最高有效位。
  • i i i i ? highBit i-\textit{highBit} i?highBit 的「一比特數(shù)」多 1 1 1 ,由于是從小到大遍歷每個整數(shù),因此遍歷到 i i i 時, i ? highBit i-\textit{highBit} i?highBit 的「一比特數(shù)」已知,令 bits [ i ] = bits [ i ? highBit ] + 1 \textit{bits}[i]=\textit{bits}[i-\textit{highBit}]+1 bits[i]=bits[i?highBit]+1
  • 最終得到的數(shù)組 bits \textit{bits} bits 即為答案。
class Solution {public int[] countBits(int n) {int[] bits = new int[n + 1];int highBit = 0;for (int i = 1; i <= n; i++) {if ((i & (i - 1)) == 0) highBit = i;bits[i] = bits[i - highBit] + 1;}return bits;}
}

復(fù)雜度分析

  • 時間復(fù)雜度: O ( n ) O(n) O(n) 。對于每個整數(shù),只需要 O ( 1 ) O(1) O(1) 的時間計算「一比特數(shù)」。
  • 空間復(fù)雜度: O ( 1 ) O(1) O(1) 。除了返回的數(shù)組以外,空間復(fù)雜度為常數(shù)。

解法3 動態(tài)規(guī)劃——最低有效位

方法二需要實時維護(hù)最高有效位當(dāng)遍歷到的數(shù)是 2 2 2 的整數(shù)次冪時,需要更新最高有效位。如果再換一個思路,可以使用「最低有效位」計算「一比特數(shù)」。

對于正整數(shù) x x x ,將其二進(jìn)制表示右移一位,等價于將其二進(jìn)制表示的最低位去掉,得到的數(shù)是 ? x 2 ? \lfloor \frac{x}{2} \rfloor ?2x??? 。如果 bits [ ? x 2 ? ] \textit{bits}\big[\lfloor \frac{x}{2} \rfloor\big] bits[?2x??] 的值已知,則可以得到 bits [ x ] \textit{bits}[x] bits[x] 的值:

  • 如果 x x x 是偶數(shù),則 bits [ x ] = bits [ ? x 2 ? ] \textit{bits}[x]=\textit{bits}\big[\lfloor \frac{x}{2} \rfloor\big] bits[x]=bits[?2x??]
  • 如果 x x x 是奇數(shù),則 bits [ x ] = bits [ ? x 2 ? ] + 1 \textit{bits}[x]=\textit{bits}\big[\lfloor \frac{x}{2} \rfloor\big]+1 bits[x]=bits[?2x??]+1

上述兩種情況可以合并成: bits [ x ] \textit{bits}[x] bits[x] 的值等于 bits [ ? x 2 ? ] \textit{bits}\big[\lfloor \frac{x}{2} \rfloor\big] bits[?2x??] 的值加上 x x x 除以 2 2 2 的余數(shù)。

由于 ? x 2 ? \lfloor \frac{x}{2} \rfloor ?2x?? 可以通過 x > > 1 x >> 1 x>>1 得到, x x x 除以 2 2 2 的余數(shù)可以通過 x & 1 x~\&~1 x?&?1 得到,因此有: bits [ x ] = bits [ x > > 1 ] + ( x & 1 ) \textit{bits}[x]=\textit{bits}[x>>1]+(x~\&~1) bits[x]=bits[x>>1]+(x?&?1)
遍歷從 1 1 1 n n n 的每個正整數(shù) i i i ,計算 bits \textit{bits} bits 的值。最終得到的數(shù)組 bits \textit{bits} bits 即為答案。

class Solution {public int[] countBits(int n) {int[] bits = new int[n + 1];for (int i = 1; i <= n; i++)bits[i] = bits[i >> 1] + (i & 1);return bits;}
}

復(fù)雜度分析:

  • 時間復(fù)雜度: O ( n ) O(n) O(n) 。對于每個整數(shù),只需要 O ( 1 ) O(1) O(1) 的時間計算「一比特數(shù)」。
  • 空間復(fù)雜度: O ( 1 ) O(1) O(1) 。除了返回的數(shù)組以外,空間復(fù)雜度為常數(shù)。

解法4 動態(tài)規(guī)劃——最低設(shè)置位

定義正整數(shù) x x x 的「最低設(shè)置位」為 x x x 的二進(jìn)制表示中的最低的 1 1 1 所在位。例如, 10 10 10 的二進(jìn)制表示是 101 0 ( 2 ) 1010_{(2)} 1010(2)? ,其最低設(shè)置位為 2 2 2 ,對應(yīng)的二進(jìn)制表示是 1 0 ( 2 ) 10_{(2)} 10(2)? 。

y = x & ( x ? 1 ) y=x~\&~(x-1) y=x?&?(x?1) ,則 y y y 為將 x x x 的最低設(shè)置位從 1 1 1 變成 0 0 0 之后的數(shù),顯然 0 ≤ y < x 0 \le y<x 0y<x bits [ x ] = bits [ y ] + 1 \textit{bits}[x]=\textit{bits}[y]+1 bits[x]=bits[y]+1 。因此對任意正整數(shù) x x x ,都有 bits [ x ] = bits [ x & ( x ? 1 ) ] + 1 \textit{bits}[x]=\textit{bits}[x~\&~(x-1)]+1 bits[x]=bits[x?&?(x?1)]+1

遍歷從 1 1 1 n n n 的每個正整數(shù) i i i,計算 bits \textit{bits} bits 的值。最終得到的數(shù)組 bits \textit{bits} bits 即為答案。

class Solution {public int[] countBits(int n) {int[] bits = new int[n + 1];for (int i = 1; i <= n; i++)bits[i] = bits[i & (i - 1)] + 1;return bits;}
}

復(fù)雜度分析:

  • 時間復(fù)雜度: O ( n ) O(n) O(n) 。對于每個整數(shù),只需要 O ( 1 ) O(1) O(1) 的時間計算「一比特數(shù)」。
  • 空間復(fù)雜度: O ( 1 ) O(1) O(1) 。除了返回的數(shù)組以外,空間復(fù)雜度為常數(shù)。
http://m.risenshineclean.com/news/65205.html

相關(guān)文章:

  • 珊瑚絨毯移動網(wǎng)站建設(shè)百度推廣頁面投放
  • 二級已備案域名免費(fèi)使用寧波搜索引擎優(yōu)化seo
  • 邯鄲做網(wǎng)站公司哪家好北京網(wǎng)站優(yōu)化多少錢
  • 專注高端網(wǎng)站設(shè)計百度百科官網(wǎng)
  • 怎樣看一個網(wǎng)站的瀏覽量太原seo網(wǎng)站排名
  • 旅游三級分銷網(wǎng)站google關(guān)鍵詞優(yōu)化排名
  • 廣州做網(wǎng)站建設(shè)的公司長沙網(wǎng)絡(luò)推廣
  • 青島旅游網(wǎng)站建設(shè)徐州seo排名公司
  • 網(wǎng)站seo計劃書代發(fā)百度關(guān)鍵詞排名
  • 網(wǎng)站建設(shè)報價 福州seo外包品牌
  • 網(wǎng)站輸入字符 顯示出來怎么做問答推廣
  • 做寫字樓用哪個網(wǎng)站更好比較靠譜的推廣平臺
  • 廣州網(wǎng)站二級等保企業(yè)網(wǎng)站營銷實現(xiàn)方式解讀
  • 英國人做愛無網(wǎng)站百度老舊版本大全
  • 外包兼職做圖的網(wǎng)站百度免費(fèi)推廣怎么操作
  • 廣州網(wǎng)站優(yōu)化哪家快洛陽市網(wǎng)站建設(shè)
  • 做綠色軟件的網(wǎng)站知乎百度關(guān)鍵詞推廣費(fèi)用
  • 網(wǎng)站獨立ip多代表什么競價推廣網(wǎng)絡(luò)推廣運(yùn)營
  • 做網(wǎng)站定金交多少合適合肥網(wǎng)站推廣優(yōu)化公司
  • 上行10m企業(yè)光纖做網(wǎng)站環(huán)球資源外貿(mào)平臺免費(fèi)
  • 上海公司注冊查詢seo視頻教程
  • 大連做網(wǎng)站需要多少錢競價托管選擇微競價
  • 南寧外包seo服務(wù)福州百度seo排名
  • 培訓(xùn)機(jī)構(gòu)招生方案win優(yōu)化大師有用嗎
  • 深圳做app網(wǎng)站制作湘潭網(wǎng)站seo磐石網(wǎng)絡(luò)
  • 做裝修公司網(wǎng)站百度應(yīng)用商店下載安裝
  • 啟源網(wǎng)站建設(shè)seo計費(fèi)系統(tǒng)開發(fā)
  • 做網(wǎng)站注冊營業(yè)執(zhí)照蘭州seo培訓(xùn)
  • 響應(yīng)式網(wǎng)站好不好引流推廣方法
  • 夏縣網(wǎng)站建設(shè)指數(shù)運(yùn)算法則