雜湊表 構造線性空間 128 最長連續序列

2021-10-06 09:00:49 字數 1264 閱讀 9143

給定乙個未排序的整數陣列,找出最長連續序列的長度。

要求演算法的時間複雜度為 o(n)。

示例:

輸入:

[100,4

,200,1

,3,2

]輸出:

4解釋: 最長連續序列是 [1,

2,3,

4]。它的長度為 4。

解題

將每個數去重儲存在set中;

遍歷set,若該存在比當前數小1的數,跳過當前數;

只找沒有比當前數小1的數作為序列頭!

找到序列頭後,進行i++,cnt++,計算以該節點為頭的序列長度;

視當前長度更新結果;

時間複雜度o(n);

class

solution

if(cnt>res) res=cnt;

}return res;

}private

: unordered_set<

int> s;

};

關鍵點

利用set對列表元素進行常數時間的查詢!

方法2:並查集

設定uni字典,儲存每個數字的父集;

設定size字典,作為並查集的優化,儲存每個集合的大小;

class

solution

for(

int t:nums)

return res;

}private

:int res;

unordered_map<

int,

int> size;

unordered_map<

int,

int> uni;

void

unin

(int a,

int b)

while

(uni[b]

!=b)

if(a==b)

return

;//同乙個集合,無需並

if(size[a]

)else

res=

max();

}};

注意點:

每次遍歷t,只需要檢視比t大的,或比t小的是否存在,進行並集即可;

若大小都並的話,會造成重複合併;

雖然uni中設定了集合名稱相同直接return,但也會耗時;

Linear hashing 線性雜湊表

section 1 問題描述 分布式或並行資料儲存資料結構的設計 1 需要具有良好的擴充套件性 scalability 能夠支援大規模資料儲存 2 不允許在不同資料節點上產生資料分布不均衡的問題,即避免產生 hotspot nodes 3 在儲存資料增加或者縮減的情況下能夠動態的儲存分配空間 在這樣...

線性之雜湊表

資料結構實驗之查詢七 線性之雜湊表 time limit 1000 ms memory limit 65536 kib submit statistic problem description 根據給定的一系列整數關鍵字和素數p,用除留餘數法定義hash函式h key key p,將關鍵字對映到長度...

雜湊表(雜湊表) 二 雜湊函式的構造方法

雜湊函式的構造方法 1 雜湊函式的選擇有兩條標準 簡單和均勻。簡單指雜湊函式的計算簡單快速 均勻指對於關鍵字集合中的任一關鍵字,雜湊函式能以等概率將其對映到表空間的任何乙個位置上。也就是說,雜湊函式能將子集k隨機均勻地分布在表的位址集上,以使衝突最小化。2 常用雜湊函式 為簡單起見,假定關鍵字是定義...