給定乙個未排序的整數陣列,找出最長連續序列的長度。
要求演算法的時間複雜度為 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 常用雜湊函式 為簡單起見,假定關鍵字是定義...