题目地址:
https://leetcode.com/problems/design-hashset/
设计HashSet。模仿java库即可。用一个数组存链表头,来一个数则将其对数组长度取模,进到相应的bucket然后check有无重复,有重复则直接返回否则加进链表尾上。代码如下:
public class MyHashSet {
class ListNode {
int key;
ListNode next;
ListNode(int key) {
this.key = key;
}
}
ListNode[] listNodes;
/** Initialize your data structure here. */
public MyHashSet() {
listNodes = new ListNode[13 * 17];
}
public void add(int key) {
int pos = key % listNodes.length;
ListNode prev = listNodes[pos];
if (prev == null) {
listNodes[pos] = new ListNode(key);
return;
}
if (prev.key == key) {
return;
}
while (prev.next != null && prev.next.key != key) {
prev = prev.next;
}
if (prev.next == null) {
prev.next = new ListNode(key);
}
}
public void remove(int key) {
int pos = key % listNodes.length;
ListNode prev = listNodes[pos];
if (prev == null) {
return;
}
if (prev.key == key) {
listNodes[pos] = prev.next;
}
while (prev.next != null && prev.next.key != key) {
prev = prev.next;
}
if (prev.next != null) {
prev.next = prev.next.next;
}
}
/** Returns true if this set contains the specified element */
public boolean contains(int key) {
int pos = key % listNodes.length;
ListNode prev = listNodes[pos];
if (prev == null) {
return false;
}
if (prev.key == key) {
return true;
}
while (prev.next != null && prev.next.key != key) {
prev = prev.next;
}
return prev.next != null;
}
}
最差时间复杂度。