1. 程式人生 > >128. 最長連續序列

128. 最長連續序列

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

要求演算法的時間複雜度為 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; } };