求一個數組的最長連續子序列
阿新 • • 發佈:2019-02-04
分析:
如果允許O(nlogn)的複雜度,那麼可以先排序,可是本題要求O(n)。
由於序列裡的元素是無序的,又要求O(n),首先要想到用雜湊表。
用一個雜湊表unordered_map<int,bool> used 記錄每個元素是否使用,
對每個元素,以該元素為中心,往左右擴張,直到不連續為止,記錄下最長的長度。
class Solution { public: int longestConsecutive(const vector<int>& nums) { unordered_map<int,bool> used; for(auto i:nums) used[i]=false; int longest=0; for(auto i:nums) { if(used[i]) continue; int length=1; used[i]=true; for(int j=i+1;used.find(j)!=used.end();++j) { used[j]=true; ++length; } for(int j=i-1;used.find(j)!=used.end();--j) { used[j]=true; ++length; } longest= longest > length ? longest:length; } return longest; } };