【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)

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