【Leetcode】705. Design HashSet

题目地址:

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;
    }
}

最差时间复杂度O(n)O(n)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章