128. 最長連續序列
阿新 • • 發佈:2018-12-13
給定一個未排序的整數陣列,找出最長連續序列的長度。
要求演算法的時間複雜度為 O(n)。
示例:
輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度為 4。
分析:如果先進行排序在遍歷求最長連續序列的長度,那麼時間複雜度需要O(nlogn),但是這題要求時間複雜度為O(n).考慮用雜湊表的想法,用一個雜湊表unordered_map<int,bool> used來記錄每個元素是否使用,以該元素在中心,向左右遍歷,直到不連續為止,每次記錄下向左向右擴張的最長長度。
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_map<int, bool> used;
for(int i = 0; i < nums.size(); i++) {
used[nums[i]] = false;
}
int longest = 0;
for(int i = 0; i < nums.size(); i++) {
if(used[nums[i]]) {
continue ;
}
int length = 1;
used[nums[i]] = true;
for(int j = nums[i] + 1; used.find(j) != used.end(); ++j) {
used[j] = true;
++length;
}
for(int j = nums[i] - 1; used.find(j) != used.end(); --j) {
used[ j] = true;
++length;
}
longest = max(longest, length);
}
return longest;
}
};