zoukankan      html  css  js  c++  java
  • LeetCode-338. Counting Bits

    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 1:

    Input: 2
    Output: [0,1,1]

    Example 2:

    Input: 5
    Output: [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.
    public int[] countBits(int num) {//位运算 my
            int[] res = new int[num+1];
            for (int i = 0; i <=num ; i++) {
                res[i]=0;
                int n = i;
                while (0!=n){
                    n= n&(n-1);
                    res[i]++;
                }
            }
            return res;
        }
    

    时间复杂度O(n),找规律

    public int[] countBits(int num) {// O(n) my
            int[] res = new int[num+1];
            res[0]=0;
            int flag = 1;
            int j=0;
            if(num>0){
                res[1]=1;
            }
            for (int i = 2; i <=num ; i++) {
                if(i==2*flag){
                    flag=flag*2;
                    j=0;
                }
                res[i]=res[j]+1;
                j++;
            }
            return res;
        }

    简洁版

    f[i] = f[i / 2] + i % 2

    public int[] countBits(int num) {
        int[] f = new int[num + 1];
        for (int i=1; i<=num; i++) f[i] = f[i >> 1] + (i & 1);
        return f;
    }
    

     

    f[i]=f[i&(i-1)]+1

    public int[] countBits(int num) {//位运算 mytip
            int[] f = new int[num+1];
            for(int i=1;i<=num;i++){
                f[i]= f[i&(i-1)]+1;
            }
            return f;
        }

    相关题

    2的幂次方 LeetCode231 https://www.cnblogs.com/zhacai/p/10631995.html

    二进制中1的个数 LeetCode191 https://www.cnblogs.com/zhacai/p/10631928.html 

  • 相关阅读:
    bzoj 1084: [SCOI2005]最大子矩阵
    Python之深浅拷贝
    2,版本控制git --分支
    1,版本控制git--仓库管理
    python-openpyxl操作excel
    ansible-3
    ansible-2
    ansible-1
    celery
    6,MongoDB 之 Array Object 的特殊操作
  • 原文地址:https://www.cnblogs.com/zhacai/p/10430986.html
Copyright © 2011-2022 走看看