2016.9.4 Leetcode (2)338.Counting Bits

题目内容如下:

屏幕快照 2016-09-04 20.53.32.png

解法一 Your runtime beats <u>2.96%</u> of cppsubmissions.

class Solution {
public:
    vector<int> countBits(int num) {
         vector<int> countBits;
        for(int i = 0; i<=num; i++){
            int count=0;
            int temp1=i;
            while(temp1>0){
                //将这个数与1进行异或,也就是将其二进制的最低位与1进行异或,
                //因为1^1=0;0^1=0, 
                //所以如果异或结果变小了,那么最低位就是1,如果异或结果变大了,那么最低位就是0.
                int res=temp1^1;
                if(temp1>res)
                    count++;
                //然后将这个数右移一位,再次进行循环异或
                temp1>>=1;
            }
            countBits.push_back(count);
        }
        return countBits;
    }
};

解法二 Your runtime beats <u>19.25%</u> of cppsubmissions.
思路:将所有数都写出来,发现这个数组的规律是
{0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4...}
可看到如果分别数到第0,2,4,8,16个的时候,每一组都是在上一组的数值上加1,所以这道题的解法也就出来了

class Solution{
public:
      vector<int> countBits(int num){
            vector<result> res;

            ans.push_back(0);//奠定第一个值
            if(num == 0)
                return and;
            
            
            for(int i = 1; j=0; i<=num;i++){
                  if(i>=pow(2,j+1))
                        j++;
                  ans.push_back(ans.at(i-pow(2,j))+1);
            }
            return ans;
    }
};

解法三:Your runtime beats <u>3.45%</u> of cppsubmissions.

class Solution {
public:
    vector<int> countBits(int num) {
         vector<int> res;

            res.push_back(0);//奠定第一个值
            if(num == 0)
                return res;
            
            
            for(int i = 1, j=0; i<=num;i++){
                  res.push_back(res.at(i/2)+i%2);
            }
            return res;
    }
};

解法四:Your runtime beats <u>77.64%</u> of cppsubmissions.
思路:受闺蜜启发,感觉这个规律很牛逼。

class Solution {
public:
    vector<int> countBits(int num) {
         vector<int> res;

            res.push_back(0);
            if(num == 0)
                return res;
            
            
            for(int i = 1; i<=num;i++){
                int temp = i&(i-1);
                res.push_back(res.at(temp)+1);
            }
            return res;
    }
};

解法五:Your runtime beats <u>98.12%</u> of cppsubmissions.
思路:将res.at换成res[],速度稍有提升

class Solution {
public:
    vector<int> countBits(int num) {
         vector<int> res;

            res.push_back(0);
            if(num == 0)
                return res;
            
            
            for(int i = 1; i<=num;i++){
                int temp = i&(i-1);
                res.push_back(res[temp]+1);
            }
            return res;
    }
};

遇到的问题:比如说最后一种解法,第一次看details,时间是98.12%,第二次再看details,时间就是50%多了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • PLEASE READ THE FOLLOWING APPLE DEVELOPER PROGRAM LICENSE...
    念念不忘的阅读 13,430评论 5 6
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,719评论 0 33
  • 在群山环绕里长大,很难想象那么一片海,高雅虚幻的浅蓝,带着斑驳的岸的图影,咸湿的空气里,膨胀着风的气息,海浪...
    蜀葵sun阅读 313评论 0 2
  • 写了一半的故事又戛然而止。 我坐在一台镜子前,空调的冷气和缓的在房间里与炎热交流。 摆好的琴没有收起来,游戏玩光了...
    柳橙芝阅读 219评论 5 4
  • 看了一个视频,说的是年轻人不要老是嚷嚷着自己老了。记得最清楚的是,青春只有一次,今天是你余生中最年轻的一天,如果不...
    祁羽居士阅读 306评论 9 1