雜湊表習題整理(1)

2021-10-05 18:24:54 字數 1851 閱讀 8297

1.拉鍊法

int h[n]

, e[n]

, ne[n]

, idx;

// 向雜湊表中插入乙個數

void

insert

(int x)

// 在雜湊表中查詢某個數是否存在

bool

find

(int x)

開放定址法
int h[n]

;// 如果x在雜湊表中,返回x的下標;如果x不在雜湊表中,返回x應該插入的位置

intfind

(int x)

return t;

}

模板題1acwing840. 模擬雜湊表

#include 

using

namespace std;

const

int n =

200003

;const

intnull

=0x7f7f7f7f

;int h[n]

;int

find

(int x)

return k;

}int

main()

elseif(

*op ==

'q')

}}

模板題2leetcode706. 設計雜湊對映

class

myhashmap

myhashmap()

/** value will always be non-negative. */

void

put(

int key,

intvalue))

;else it-

>second =

value;}

intget

(int key)

void

remove

(int key)};

/** * your myhashmap object will be instantiated and called as such:

* myhashmap* obj = new myhashmap();

* obj->put(key,value);

* int param_2 = obj->get(key);

* obj->remove(key);

*/

解法一:用先序遍歷將二叉樹線索化,則每一棵子樹對應乙個字串,用hash來記錄每條字串的個數。由於線索化字串的長度是o(n)的,一共n個節點,做n次操作時間複雜度就成o(n^2)的了。
class

solution

vector>

findduplicatesubtrees

(treenode* root)

};

解法二:在解法一的基礎上可考慮將每乙個字串對映成乙個數字,則一棵子樹的字串長度即變成o(1)級的,包括頭節點,左邊字串對應的數字,右邊字串對應的數字。時間複雜度降為o(n)級。
class

solution

vector>

findduplicatesubtrees

(treenode* root)

};

思路:使用sum儲存字首和s[i]。mp[sum-k]表示sum-k這一字首和出現的次數。此時字首和為sum,sum - (sum - k)即為k,存在mp[sum-k]個子陣列和為k。
class

solution

return ans;}}

;

1 雜湊表(雜湊表)的定義

一般的查詢 給你乙個順序表,你會如何查詢某個給定的元素?到了有序表 已排序的表 查詢時,我們可以利用a i 與key的 或 來折半查詢,直到相等時查詢成功返回i。反正我們的目標就是要找到那個 i 值,是不是還有其它好點的方法呢?乙個小故事 試想這樣的場景,你很想學太極拳,聽說學校有個叫張三丰的人打得...

資料結構 雜湊表1(雜湊表)

雜湊表 雜湊表是一種資料結構,它提供了快速的插入操作和查詢操作,其基於陣列來實現。雜湊化方式 1 直接將關鍵字作為索引。弊端 關鍵字資料型別只能是整形。2 將單詞轉換成索引。將字母轉換成ascii碼,然後進行相加。弊端 會出現不同的字串轉換ascii碼的值和相同。冪的連乘。弊端 通過冪的連乘得到的k...

dfs 回溯習題整理(1)

搜尋順序 按照給出的數字依次進行搜尋,對於每乙個數字列舉它選用每乙個字母的方案。回溯 當下乙個字串已經列舉完成時,需要更新當前字串,此時需要進行回溯。然後進行列舉,到當前字串的下乙個元素。第一次寫時,迴圈的意義沒有考慮清楚,這個做法的迴圈是列舉當前字串的每個字元,而不是下乙個字串的每個字元。clas...