leetcode705设计哈希集合

桃扇骨 2022-10-06 11:47 236阅读 0赞

在这里插入图片描述
在这里插入图片描述
思路:

  1. 直接开个超大数组

代码

  1. class MyHashSet {
  2. private:
  3. int message[1000001];
  4. public:
  5. /** Initialize your data structure here. */
  6. MyHashSet() {
  7. for(auto &a:message)
  8. a=0;
  9. }
  10. void add(int key) {
  11. if(message[key]==0)
  12. message[key]=1;
  13. }
  14. void remove(int key) {
  15. if(message[key])
  16. message[key]=0;
  17. }
  18. /** Returns true if this set contains the specified element */
  19. bool contains(int key) {
  20. if(message[key])
  21. return true;
  22. return false;
  23. }
  24. };
  1. 拉链法 list超时了

    class MyHashSet {
    private:

    1. int base = 1023;
    2. vector<list<int>> messages;//这不能初始化

    public:

    1. int hash(int key){
    2. return key%base;
    3. }
    4. /** Initialize your data structure here. */
    5. MyHashSet() //:messages(base)
    6. { //只有在这个地方才能初始化
    7. messages.resize(base);
    8. }
    9. void add(int key) {
    10. int num = hash(key);
    11. for(auto a = messages[num].begin();a!=messages[num].end();a++){
    12. if(*a==key)
    13. return;
    14. }
    15. messages[num].push_back(key);
    16. }
    17. void remove(int key) {
    18. int num = hash(key);
    19. for(auto a = messages[num].begin();a!=messages[num].end();){
    20. if(*a==key){
    21. a = messages[num].erase(a);
    22. return;
    23. }
    24. else a++;
    25. }
    26. }
    27. /** Returns true if this set contains the specified element */
    28. bool contains(int key) {
    29. int num = hash(key);
    30. for(auto a = messages[num].begin();a!=messages[num].end();){
    31. if(*a==key)
    32. return true;
    33. }
    34. return false;
    35. }

    };

发表评论

表情:
评论列表 (有 0 条评论,236人围观)

还没有评论,来说两句吧...

相关阅读