不使用任何内建的哈希表库设计一个哈希集合
具体地说,你的设计应该包含以下的功能
- add(value):向哈希集合中插入一个值。
- contains(value) :返回哈希集合中是否存在这个值。
- remove(value):将给定值从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。
注意:
- 所有的值都在 [1, 1000000]的范围内。
- 操作的总数目在[1, 10000]范围内。
- 不要使用内建的哈希集合库。
思路一:
该方法较为简单,但性能较差,根据题意创建百万级的数组,用于一一映射要插入的数值,尽管题目的值是从1开始,但是实际测试用例却包含了0,所以需要将数组赋值为-1,不然判断是否contains(0)时,就会报错!
class MyHashSet {
private int[] arr;
/** Initialize your data structure here. */
public MyHashSet() {
arr = new int[1000000];
for(int i = 0; i < arr.length; i++){
arr[i] = -1;
}
}
public void add(int key) {
arr[key] = key;
}
public void remove(int key) {
if (arr[key] != key) {
return;
}else {
arr[key] = -1;
}
}
/** Returns true if this set did not already contain the specified element */
public boolean contains(int key) {
if (arr[key] == key) {
return true;
}
return false;
}
}
**思路二:**使用List和LinkedList实现一个散列表