zoukankan      html  css  js  c++  java
  • [LeetCode]338 Counting Bits(dp,lowbit)

    题目链接:https://leetcode.com/problems/counting-bits/?tab=Description

    题意:求[0~n]里各个数的二进制下1的个数。空间时间复杂度都要求O(num)。

    很容易想出来递推关系,那就是二进制下x个1是由x-1个1表示的数字中+1过来的,然而如何用快速的方法表示这种关系。回忆到了BIT中的更新方式,很容易想到用lowbit来获取一个唯一的比当前数二进制下1的数少一个1的数。递推式就是f(i)=f(i-lowbit(i))+1。

     1 class Solution {
     2 public:
     3     int lowbit(int x) {
     4         return x & (-x);
     5     }
     6   vector<int> countBits(int num) {
     7       vector<int> f(num+1, 0);
     8       for(int i = 1; i <= num; i++) {
     9           f[i] = f[i-lowbit(i)] + 1;
    10       }
    11       return f;
    12   }
    13 };
  • 相关阅读:
    HDU
    洛谷- P1306 斐波那契公约数
    HDU
    HDU
    POJ3321
    SPOJ
    HDU
    POJ 1236 Network of Schools
    POJ-3169 Layout (差分约束+SPFA)
    POJ-1062 昂贵的聘礼 (最短路)
  • 原文地址:https://www.cnblogs.com/kirai/p/6530305.html
Copyright © 2011-2022 走看看