leetcode 338. Counting Bits
Posted ctqchina
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 338. Counting Bits相关的知识,希望对你有一定的参考价值。
很容易想到时间复杂度为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的主要内容,如果未能解决你的问题,请参考以下文章