这个我可能做的不是很符合题意,虽然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);
*/