刷leetcode第705题- 设计哈希集合

这个我可能做的不是很符合题意,虽然AC了,但是没有去用到hash函数之类的方式。同样使用了位运算来搞定这一切,简单易懂。上代码如下:

typedef char MyHashSet;

/** Initialize your data structure here. */
MyHashSet* myHashSetCreate() {
    int size = 100000/8+1;
    MyHashSet* obj = (MyHashSet*)malloc(sizeof(MyHashSet)*size);
    memset (obj,0,size);
    return obj;
}

void myHashSetAdd(MyHashSet* obj, int key) {
    int position = key/8;
    char area = key%8;
    char mask = 1<<area;
    *(obj+position) |=mask;
}

void myHashSetRemove(MyHashSet* obj, int key) {
    int position = key/8;
    char area = key%8;
    char mask = ~(1<<area);
    *(obj+position)&=mask;
}

/** Returns true if this set contains the specified element */
bool myHashSetContains(MyHashSet* obj, int key) {
    int position = key/8;
    char area = key%8;
    char mask = 1<<area;
    return (*(obj+position)&mask) == mask;
}

void myHashSetFree(MyHashSet* obj) {
    free(obj);
}

/**
 * Your MyHashSet struct will be instantiated and called as such:
 * struct MyHashSet* obj = myHashSetCreate();
 * myHashSetAdd(obj, key);
 * myHashSetRemove(obj, key);
 * bool param_3 = myHashSetContains(obj, key);
 * myHashSetFree(obj);
 */

转载于:https://my.oschina.net/zwyang/blog/3014058

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值