2016.9.4 Leetcode (2)338.Counti

作者: Y姑娘111920 | 来源:发表于2016-09-06 10:58 被阅读0次

题目内容如下:

屏幕快照 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%多了。

相关文章

  • 2016.9.4 Leetcode (2)338.Counti

    题目内容如下: 解法一 Your runtime beats 2.96% of cppsubmissions...

  • 2016.9.4 2/70

    参加这个活动,仍然难以采取行动。 看书,却没有心得。 如咸鱼一般。 想起邓教授的教导,不要只是积累,只是拥有,要懂...

  • 2016.9.4

    总是要下狠心删掉一些东西,或许这也是一种改变的开始。。。内心会挣扎,当闭着眼删掉的时候 睁开眼还是很失落。。。 但...

  • 2016.9.4

    明早就要出发 是快乐 还是堕落 是努力温柔 还是骄傲孤独 你面对 你选择 可无论怎样 你都要变得更加优秀 才对得起...

  • 2016.9.4

    拍完照了。回家的路上。 拍完了突然神清气爽, 拍照过程备受煎熬。 化妆的姐姐叫我留长发, 说我其实不是特别中性, ...

  • 2016.9.4.

    以前你一直说我是长不大的孩子 我只是不愿意长大罢了 现在 只不过是被迫长大 我愿意为你 不再任性 不再骄纵 不复天...

  • 让爱好成为优势――BBC每日学习

    BBC News 2016.9.4 1.unilateral单方的 unilateral decisions单方决...

  • 021 《解忧杂货店》(东野圭吾)#100-Book计划#

    评分★★★★☆ 021/100 阅读时间 2016.9.4 ISBN 9787544270878 嗯,看这本书眼眶...

  • 2018-06-14

    Q1:leetcode 622Q2:leetcode 259Q3:leetcode 15Q4:leetcode 1...

  • 2016.9.4晚打卡

    《谁动了我的奶酪》今日阅读感想:现在的世界瞬息万变,不变化,不学习将会被淘汰,活到老学到老,有失才有得,遇到事情变...

网友评论

    本文标题:2016.9.4 Leetcode (2)338.Counti

    本文链接:https://www.haomeiwen.com/subject/pfzlettx.html