力扣每日一題 Day 1(設計雜湊集合)

2021-10-22 01:51:10 字數 1475 閱讀 9296

不使用任何內建的雜湊表庫設計乙個雜湊集合(hashset)。

實現 myhashset 類:

void add(key) 向雜湊集合中插入值 key 。

bool contains(key) 返回雜湊集合中是否存在這個值 key 。

void remove(key) 將給定值 key 從雜湊集合中刪除。如果雜湊集合中沒有這個值,什麼也不做。

示例:輸入:

[「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 <= 106

最多呼叫 104 次 add、remove 和 contains 。

高階:你可以不使用內建的雜湊集合庫解決此問題嗎?

整體的思路是照著官方的題解自己寫了一遍,為方便自己記憶,在此重新整理一遍。於是根據鏈位址法開闢了乙個向量,向量儲存的是乙個個鍊錶。每個鍊錶儲存的是雜湊值相同的資料項。

官方題解為了盡可能避免衝突,將base取為了乙個質數769,其實選取足夠大的質數保證資料量大的同時每個單元鍊錶內的資料項盡可能少就行。

class myhashset 

public:

myhashset():data(base){};

void add(int key)

data[temp].push_back(key);

}void remove(int key) }}

/** returns true if this set contains the specified element */

bool contains(int key)

return false;

}};

複習了資料結構中雜湊表的內容,加深了上學期粗略學習過的印象。

力扣每日一題706 設計雜湊對映

原理和昨天一樣 hash表 陣列 鍊錶 今天要考慮鍵值 因此使用結構體kv儲存鍵 和值。如果沒有該鍵 則使用結構體進行構造新鍵值。並將其壓入list中。class myhashmap struct kv vector set public initialize your data structure...

力扣每日一題 706 設計雜湊對映

解題思路 解題 解題感悟 難度 簡單 題目 不使用任何內建的雜湊表庫設計乙個雜湊對映 hashmap 實現 myhashmap 類 輸入 myhashmap put put get get put get remove get 1,1 2,2 1 3 2,1 2 2 2 輸出 null,null,n...

每日一題 力扣 計畫

98 驗證二叉搜尋樹 問題給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 1.節點的左子樹只包含小於當前節點的數。2.節點的右子樹只包含大於當前節點的數。3.所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true示例2 輸入 5 1 4...