码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 338. Counting Bits

时间:2018-12-13 01:20:32      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:ret   bit   etc   nlogn   span   时间复杂度   一个   二进制   ++   

很容易想到时间复杂度为O(nlogn)的做法。可以做一个小优化,就是先找出小于num的2的次幂,然后ans[i] = 1 + ans[i-max2];就是i的二进制中1的个数等于1+i-小于i的最大的2次幂的1的个数。

class Solution {
    public int[] countBits(int num) {
        
        num++;
        int[] ans = new int[num], can = new int [num];
        ans[0] = 0;
        if(num == 1) return ans;
        for(int i=2;i<num;i*=2) {
            can[i] = i;
            ans[i] = 1;
        }
        for(int i=3;i<num;i++){
            if(can[i] == 0) can[i] = can[i-1];
        }
        ans[1] = 1;
        for(int i=3;i<num;i++){
            
            ans[i] = 1+ans[i-can[i]];
        }
        return ans;
    }
}

 

leetcode 338. Counting Bits

标签:ret   bit   etc   nlogn   span   时间复杂度   一个   二进制   ++   

原文地址:https://www.cnblogs.com/ctqchina/p/10111636.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!