力扣705-设计哈希集合


力扣705-设计哈希集合

一、原题题目

1.1 题目

  不使用任何内建的哈希表库设计一个哈希集合(HashSet)。

实现 MyHashSet 类:

  • void add(key) 向哈希集合中插入值 key 。
  • bool contains(key) 返回哈希集合中是否存在这个值 key 。
  • void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。

1.2 示例

输入:
["MyHashSet", "add", "add", "contains", "contains", "add", "contains", "remove", "contains"]
[[], [1], [2], [1], [3], [2], [2], [2], [2]]
输出:
[null, null, null, true, false, null, true, null, false]
解释:
MyHashSet myHashSet = new MyHashSet();
myHashSet.add(1);      // set = [1]
myHashSet.add(2);      // set = [1, 2]
myHashSet.contains(1); // 返回 True
myHashSet.contains(3); // 返回 False ,(未找到)
myHashSet.add(2);      // set = [1, 2]
myHashSet.contains(2); // 返回 True
myHashSet.remove(2);   // set = [1]
myHashSet.contains(2); // 返回 False ,(已移除)

提示:

  • 0 <= key <= 106
  • 最多调用 104addremovecontains

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/design-hashset

二、解题思路

2.1 利用【ArrayList】解题

  • 解题思路

  用一个 list 去实现,比较容易想到。

  • 详细代码(Java)
public class MyHashSet {
    private ArrayList<Integer> myHashSet;
    public MyHashSet() {
        myHashSet = new ArrayList<>();
    }
    public void add(int key) {
        if (myHashSet.contains(key));
        else myHashSet.add(key);
    }
    public void remove(int key) {
        if (myHashSet.contains(key))
            myHashSet.remove((Integer)key);
    }
    public boolean contains(int key) {
        return myHashSet.contains(key);
    }
}
  • 代码执行结果
ArrayList执行结果

2.2 利用【Boolen数组】解题

  • 解题思路

  因为题目限定了 key 的数量会小于等于 10^6,所以可以用一个1000001的Boolen数组来存每一个 key ,key 对应数组的下标。

  • 详细代码(Java)
public class MyHashSet {
    private boolean[] myHashSet;
    public MyHashSet(){
        myHashSet = new boolean[1000000];
    }
    public void add(int key) {
        myHashSet[key] = true;
    }
    public void remove(int key){
        myHashSet[key] = false;
    }
    public boolean contains(int key){
        return myHashSet[key];
    }
}
  • 代码执行结果
Boolen数组方法结果

文章作者: ItDaChuang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ItDaChuang !
评论
 上一篇
力扣191-位1的个数 力扣191-位1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数
2021-03-22
下一篇 
力扣331-验证二叉树的前序序列化 力扣331-验证二叉树的前序序列化
序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如
2021-03-12
  目录