#include<bits/stdc++.h>
using namespace std;
int bc[maxn];
int main()
{
//O(n)求[1,n]
for ( int i=0 ; i<maxn ; i++ )
bc[i] = bc[i>>1]+(i&1);
//O(logn)求单个整数
printf ( "%d\n" , __builtin_popcount(1LL*2147483648) );
return 0;
}
本文介绍了一种利用位操作实现高效计数的算法。该算法包括两部分:一是使用O(n)的时间复杂度预处理从1到n的所有整数的1的个数;二是通过内置函数以O(log n)的时间复杂度计算特定整数中1的个数。这种算法在处理大量数据时非常高效。
7690

被折叠的 条评论
为什么被折叠?



