LeetCode算法題-Design HashSet(Java實現)

這是悅樂書的第298次更新,第317篇原創

01 看題和準備

今天介紹的是LeetCode算法題中Easy級別的第166題(順位題號是705)。不使用任何內建的hash表庫設計一個hash集合,應包含以下功能:

add(value):向哈希集合中插入一個值。

contains(value) :返回哈希集合中是否存在這個值。

remove(value):將給定值從哈希集合中刪除。如果哈希集合中沒有這個值,什麼也不做。

例如:

MyHashSet hashSet = new MyHashSet();
hashSet.add(1);
hashSet.add(2);
hashSet.contains(1); // 返回 true
hashSet.contains(3); // 返回 false (未找到)
hashSet.add(2);
hashSet.contains(2); // 返回 true
hashSet.remove(2);
hashSet.contains(2); // 返回 false (已經被刪除)


注意

  • 所有的值都在 [1, 1000000]的範圍內。

  • 操作的總數目在[1, 10000]範圍內。

  • 不要使用內建的哈希集合庫。

本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。

02 第一種解法

利用數組,哈希集合裏所有值都在 [1, 1000000]的範圍內,用key當作數組下標,如果存入數key就使arrs[key]爲1,用於判斷哈希集合是否有該值。

    int arrs[]=new int[1000001];
    public MyHashSet() {

    }
    public void add(int key) {
        arrs[key]=1;
    }
    public void remove(int key) {
        arrs[key]=0;
    }
    public boolean contains(int key) {
        return arrs[key]==1;
    }


03 第二種解法

同第一種解法思路。

    boolean arrs[]=new boolean[1000001];
    public MyHashSet() {

    }
    public void add(int key) {
        arrs[key]=true;
    }
    public void remove(int key) {
        arrs[key]=false;
    }
    public boolean contains(int key) {
        return arrs[key]==true;
    }


04 第三種解法

使用ArrayList集合處理,調用它提供的api。

    private List<Integer> list = null;
    public MyHashSet() {
        list=new ArrayList<>();
    }
    public void add(int key) {
        list.add(key);
    }
    public void remove(int key) {
        for (int i = list.size() - 1; i >= 0; i--) {
            if (list.get(i) == key) {
                list.remove(i);
            }
        }
    }
    public boolean contains(int key) {
        return list.contains(key);
    }


05 小結

算法專題目前已日更超過四個月,算法題文章166+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。

以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!

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