最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言題解LeetCode705設(shè)計(jì)哈希集合

 更新時(shí)間:2022年12月28日 15:29:17   作者:劉09k11  
這篇文章主要為大家介紹了Go語言題解LeetCode705設(shè)計(jì)哈希集合,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

題目描述

705. 設(shè)計(jì)哈希集合

不使用任何內(nèi)建的哈希表庫設(shè)計(jì)一個(gè)哈希集合(HashSet)。

實(shí)現(xiàn) MyHashSet 類:

  • void add(key) 向哈希集合中插入值 key 。
  • bool contains(key) 返回哈希集合中是否存在這個(gè)值 key 。
  • void remove(key) 將給定值 key 從哈希集合中刪除。如果哈希集合中沒有這個(gè)值,什么也不做。   示例:
輸入:
["MyHashSet", "add", "add", "contains", "contains", "add", "contains", "remove", "contains"]
[[], [1], [2], [1], [3], [2], [2], [2], [2]]
輸出:
[null, null, null, true, false, null, true, null, false]
解釋:
MyHashSet myHashSet = new MyHashSet();
myHashSet.add(1);      // set = [1]
myHashSet.add(2);      // set = [1, 2]
myHashSet.contains(1); // 返回 True
myHashSet.contains(3); // 返回 False ,(未找到)
myHashSet.add(2);      // set = [1, 2]
myHashSet.contains(2); // 返回 True
myHashSet.remove(2);   // set = [1]
myHashSet.contains(2); // 返回 False ,(已移除)

提示:

  • 0 <= key <= 10^6
  • 最多調(diào)用 10^4 次 add、remove 和 contains

思路分析

實(shí)現(xiàn)使用了鏈地址法,解決哈希沖突方法使用了模取余的方法(較簡單的)。

這里說下為什么大家說模最好取質(zhì)數(shù),我的理解是取質(zhì)數(shù)可以讓取余后的結(jié)果更加均勻,以減少?zèng)_突。

舉個(gè)例子,假如我們?nèi)?為模,那么雖然理論上我們應(yīng)該會(huì)讓數(shù)字均勻落入4個(gè)桶中,但是對(duì)于下邊這個(gè)數(shù)組:

1,3,5,7,9

所有數(shù)字都落入了1,3兩個(gè)桶中,造成了極大的不均,導(dǎo)致哈希沖突發(fā)生頻繁。對(duì)于一個(gè)合數(shù),只要我們構(gòu)造合數(shù)倍數(shù)相關(guān)的數(shù)組,就很容易使哈希沖突變多,所以盡量選用質(zhì)數(shù)。

AC 代碼

struct Listnode{
    int val;
    Listnode* next = nullptr;
    Listnode()=default;
    Listnode(int val){
        this->val = val;
    }
};
class MyHashSet {
public:
    /** Initialize your data structure here. */
    const int prime = 991;
    vector<Listnode*> nodes;
    MyHashSet(): nodes(prime, nullptr){
    }
    void add(int key) {
        if(nodes[key%prime] == nullptr){
            nodes[key%prime] = new Listnode(key);
        }else{
            Listnode* node = nodes[key%prime];
            while(node != nullptr){
                if(node->val == key)return;
                node = node->next;
            }
            node = new Listnode(key);
            node->next = nodes[key%prime];
            nodes[key%prime] = node;
        }
    }
    void remove(int key) {
        Listnode* prenode = nodes[key%prime];
        if(prenode != nullptr && prenode->val == key){
            if(prenode->next != nullptr){
                nodes[key%prime] = prenode->next;
                delete prenode;
            }else{
                delete prenode;
                nodes[key%prime] = nullptr;
            }
            return;
        }
        while(prenode != nullptr && prenode->next != nullptr){
            if(prenode->next->val == key){
                Listnode* temp = prenode->next;
                prenode->next = prenode->next->next;
                delete temp;
                return;
            }
            prenode = prenode->next;
        }
    }
    /** Returns true if this set contains the specif ied element */
    bool contains(int key) {
        Listnode* node = nodes[key%prime];
        while(node != nullptr){
            if(node->val == key)return true;
            node = node->next;
        }
        return false;
    }
};
/**
 * Your MyHashSet object will be instantiated and called as such:
 * MyHashSet* obj = new MyHashSet();
 * obj->add(key);
 * obj->remove(key);
 * bool param_3 = obj->contains(key);
 */

以上就是Go語言題解LeetCode705設(shè)計(jì)哈希集合的詳細(xì)內(nèi)容,更多關(guān)于Go語言設(shè)計(jì)哈希集合的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • golang架構(gòu)設(shè)計(jì)開閉原則手寫實(shí)現(xiàn)

    golang架構(gòu)設(shè)計(jì)開閉原則手寫實(shí)現(xiàn)

    這篇文章主要為大家介紹了golang架構(gòu)設(shè)計(jì)開閉原則手寫實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • golang切片擴(kuò)容規(guī)則實(shí)現(xiàn)

    golang切片擴(kuò)容規(guī)則實(shí)現(xiàn)

    這篇文章主要介紹了golang切片擴(kuò)容規(guī)則實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • golang中包無法引入問題解決

    golang中包無法引入問題解決

    本文主要介紹了golang中包無法引入問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go語言實(shí)現(xiàn)的可讀性更高的并發(fā)神庫詳解

    Go語言實(shí)現(xiàn)的可讀性更高的并發(fā)神庫詳解

    這篇文章主要為大家介紹了Go語言實(shí)現(xiàn)的可讀性更高的并發(fā)神庫詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • golang time包下定時(shí)器的實(shí)現(xiàn)方法

    golang time包下定時(shí)器的實(shí)現(xiàn)方法

    定時(shí)器的實(shí)現(xiàn)大家應(yīng)該都遇到過,最近在學(xué)習(xí)golang,所以下面這篇文章主要給大家介紹了關(guān)于golang time包下定時(shí)器的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-12-12
  • 深入string理解Golang是怎樣實(shí)現(xiàn)的

    深入string理解Golang是怎樣實(shí)現(xiàn)的

    這篇文章主要為大家介紹了深入string理解Golang是怎樣實(shí)現(xiàn)的原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 利用Go Plugin實(shí)現(xiàn)插件化編程的簡單方法

    利用Go Plugin實(shí)現(xiàn)插件化編程的簡單方法

    Golang官方提供了plugin模塊,該模塊可以支持插件開,下面這篇文章主要給大家介紹了關(guān)于如何利用Go Plugin實(shí)現(xiàn)插件化編程的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • go語言通過odbc操作Access數(shù)據(jù)庫的方法

    go語言通過odbc操作Access數(shù)據(jù)庫的方法

    這篇文章主要介紹了go語言通過odbc操作Access數(shù)據(jù)庫的方法,實(shí)例分析了Go語言通過odbc連接、查詢與關(guān)閉access數(shù)據(jù)庫的技巧,需要的朋友可以參考下
    2015-03-03
  • golang API開發(fā)過程的中的自動(dòng)重啟方式(基于gin框架)

    golang API開發(fā)過程的中的自動(dòng)重啟方式(基于gin框架)

    這篇文章主要介紹了golang API開發(fā)過程的中的自動(dòng)重啟方式(基于gin框架),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • go實(shí)現(xiàn)base64編碼的四種方式

    go實(shí)現(xiàn)base64編碼的四種方式

    本文主要介紹了go實(shí)現(xiàn)base64編碼的四種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評(píng)論

阜南县| 双流县| 清丰县| 隆德县| 华阴市| 江北区| 西城区| 伊宁县| 新丰县| 江北区| 安吉县| 巴林右旗| 贵南县| 防城港市| 招远市| 钟祥市| 宝清县| 正安县| 营口市| 蒙自县| 偃师市| 中西区| 保山市| 鄯善县| 衡水市| 恩平市| 错那县| 达孜县| 乐业县| 永宁县| 莱阳市| 琼中| 克什克腾旗| 蓝山县| 博客| 莱芜市| 济源市| 含山县| 海口市| 莱州市| 嘉黎县|