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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

338. Counting Bits(动态规划)

發(fā)布時間:2024/4/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 338. Counting Bits(动态规划) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.

Example:
For num = 5 you should return [0,1,1,2,1,2].

Follow up:

It is very easy to come up with a solution with run time O(n*sizeof(integer)). But can you do it in linear time O(n) /possibly in a single pass?

  • Space complexity should be O(n).
  • Can you do it like a boss? Do it without using any builtin function like __builtin_popcount in c++ or in any other language.

分析:

這道題完全沒看別人的思路,自己想出來的第一道動態(tài)規(guī)劃題目,開心<( ̄︶ ̄)> 當n為奇數(shù)時,則n-1為偶數(shù),由二進制可知,n-1的二進制最后一位必定是0 而n的二進制就是在n-1的二進制最后一位加1,并未影響n-1的前面的情況,只把最后一位0,變?yōu)榱?,所以當n=奇數(shù)時,dp[n]=dp[n-1]+1; 舉個栗子:6=1*(2^2)+1*(2^1)+0*(2^0),6的二進制是110.7=1*(2^2)+1*(2^1)+1*(2^0),7的二進制是111. 當n為偶數(shù)時,先舉個栗子吧,6=1*(2^2)+1*(2^1)+0*(2^0),6的二進制是110. n/2就是把每一項都除以2,但是你會發(fā)現(xiàn)每一項的系數(shù)是不變的,6/2=3=1*(2^1)+1*(2^0)+0(2^0) 所以當n=偶數(shù)時,dp[n]=dp[n/2]. class Solution { public:vector<int> countBits(int num) {vector<int> dp(num+1,0);for(int i=1;i<num+1;i++){if(i%2==0)dp[i]=dp[i/2];else dp[i]=dp[i-1]+1;}return dp;} };

轉(zhuǎn)載于:https://www.cnblogs.com/A-Little-Nut/p/8323535.html

總結(jié)

以上是生活随笔為你收集整理的338. Counting Bits(动态规划)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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