• LeetCode -- Counting Bits


    Question:

    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:
    For num = 5 you should return [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.

      Analysis:

      给定一个非负的整数num,对于0 ≤ i ≤ num的每一个i,计算i的二进制位中有多少个1,返回一个记录1的个数的数组。

      Follow up:

      你能在O(n)的时间内只遍历一遍得到答案嘛?

      空间复杂度为O(n).

      思路:

      因为是计算1的个数,所以肯定跟除2以及除2后的余数有关系了。而且计算时是递增的,因此下一个数字可以利用上一个数字的计算结果。

      代码如下:

      public class Solution {
          public int[] countBits(int num) {
              int[] dp = new int[num+1];
              dp[0] = 0;
              for(int i=1; i<=num; i++) {
                  int t1 = i / 2;
                  int t2 = i % 2;
                  dp[i] = dp[t1] + t2;
              }
              return dp;
          }
      }
    1. 相关阅读:
      Leetcode:42. Trapping Rain Water
      Leetcode: 41. First Missing Positive
      Leetcode: 40. Combination Sum II
      多项式全家桶
      BZOJ 3878 [AHOI&JSOI2014]奇怪的计算器 (线段树)
      BZOJ 2959 长跑 (LCT+并查集)
      BZOJ 3028 食物 (生成函数+数学题)
      luogu P5504 [JSOI2011]柠檬
      hdu 6399 City Development
      luogu P3826 [NOI2017]蔬菜
    2. 原文地址:https://www.cnblogs.com/little-YTMM/p/5377489.html
    Copyright © 2020-2023  润新知