用set,注意當遍歷set後,要把對應的值從set中清除掉,這樣會大大減小複雜度。
用unordered_set時間會更快,後面瞭解下set 和 unordered_set的區別。
class Solution {
public:
set<int>v;
int getLen(int x)
{
int len = 1;
int start, end;
start = end = x;
v.erase(x);
while(v.find(--start) != v.end())
{
v.erase(start);
len ++ ;
}
while(v.find(++end) != v.end())
{
v.erase(end);
len ++ ;
}
return len;
}
int longestConsecutive(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
v.clear();
if(num.size() == 0) return 0;
for(int i = 0; i < num.size(); ++ i) v.insert(num[i]);
int ans = 0, current_len = 0;
for(int i = 0; i < num.size(); ++ i)
{
if(v.find(num[i]) != v.end())
{
current_len = getLen(num[i]);
if(current_len > ans) ans = current_len;
}
}
return ans;
}
};