最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python數(shù)據(jù)結(jié)構(gòu)leetcode338比特位計(jì)數(shù)算法

 更新時(shí)間:2022年06月10日 11:33:47   作者:悲戀花丶無(wú)心之人  
這篇文章主要介紹了力扣刷題中python數(shù)據(jù)結(jié)構(gòu)leetcode338比特位計(jì)數(shù)算法解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、題目?jī)?nèi)容

給定一個(gè)非負(fù)整數(shù) num。對(duì)于 0 ≤ i ≤ num 范圍中的每個(gè)數(shù)字 i ,計(jì)算其二進(jìn)制數(shù)中的 1 的數(shù)目并將它們作為數(shù)組返回。

示例 1:

輸入: 2

輸出: [0,1,1]

示例 2:

輸入: 5

輸出: [0,1,1,2,1,2]

進(jìn)階:

給出時(shí)間復(fù)雜度為O(n*sizeof(integer))的解答非常容易。但你可以在線性時(shí)間O(n)內(nèi)用一趟掃描做到嗎?

要求算法的空間復(fù)雜度為O(n)。

你能進(jìn)一步完善解法嗎?要求在C++或任何其他語(yǔ)言中不使用任何內(nèi)置函數(shù)(如 C++ 中的 __builtin_popcount)來(lái)執(zhí)行此操作。

二、解題思路

動(dòng)態(tài)規(guī)劃,i>>1指的是i右移一位,這樣的話i的最低位會(huì)被去掉,因此i與i>>1相當(dāng)于比較最后一位是否為1;

當(dāng) i 的最低位為0,則 i 和i >> 1中1的個(gè)數(shù)是一樣的,因?yàn)?不算進(jìn)計(jì)算1的個(gè)數(shù);

否則,最低位為1,1相當(dāng)于被抹掉了,因此 i >> 1中1的個(gè)數(shù)加1就是i 中1的個(gè)數(shù);

三、代碼

class Solution:
    def countBits(self, num: int) -> list:
        dp = [0 for _ in range(num + 1)]
        for i in range(num + 1):
            i_last_num = i & 1  # 得到i的末位數(shù)字
            if i_last_num == 0:
                dp[i] = dp[i >> 1]
            else:
                dp[i] = dp[i >> 1] + i_last_num
        return dp
 
 
if __name__ == '__main__':
    s = Solution()
    num = 5
    ans = s.countBits(num)
    print(ans)

以上就是python數(shù)據(jù)結(jié)構(gòu)leetcode338比特位計(jì)數(shù)算法的詳細(xì)內(nèi)容,更多關(guān)于python數(shù)據(jù)結(jié)構(gòu)比特位計(jì)數(shù)算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

全南县| 丁青县| 盐源县| 保靖县| 高淳县| 读书| 西充县| 图片| 辽阳市| 沈阳市| 长丰县| 翼城县| 克什克腾旗| 临西县| 孟连| 河北区| 丹凤县| 阳江市| 登封市| 乡宁县| 通渭县| 宁国市| 海晏县| 仙游县| 南投市| 永川市| 夏河县| 无为县| 威远县| 栾城县| 高淳县| 彭水| 库伦旗| 南投市| 彰化县| 余江县| 西林县| 南溪县| 平乐县| 永胜县| 墨玉县|