《编程珠玑》笔记


#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1+ N/BITSPERWORD];

void set(int i)
{
    a[a>>SHIFT] |= (1<<(i & MASK));
}

void clr(int i)
{
    a[i>>SHIFT] &= ~(1<<(i & MASK));
}

int test(int i)
{
   return a[i>>SHIFT] & (1<<(i & MASK)) ;
}

int a[1+ N/BITSPERWORD]; 就是把n个数分成1+ N/BITSPERWORD个数组,数组每个元素可以表示32个数,分别对应每bit位为1.  这样就可以表示10 000 000个整数
比如说 整数为 1234,先找一下在第几组 1234/32= 39余16 ,那么就是在a[39]的第15位是1. 这个1就相当于在特别大的比特组中第1234位是1(也就是存在这个数).
根据这个返回再看算法是不是一目了然

优质内容筛选与推荐>>
1、vmware workstation虚拟机中的redhat嘟嘟的响
2、11月26日
3、【Leetcode】【Easy】Path Sum
4、2D UI 跟随3D 物体(自带缩放)
5、python中yield的理解


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号