您的位置:首页 > 产品设计 > UI/UE

[leetcode]Longest Consecutive Sequence

2013-12-29 11:58 309 查看
找一个没排序的数组的最长连续块是多长

第一想法,排序,遍历就ok。。。

但是要求时间复杂度是O(n)

想了几分钟TAT

用hash记录每个数字啊。。。

然后枚举就好了。。

数字为n的时候扫描其左右两边时候有连续的数字

如果有就从hash删掉。。继续。。。直到没有。。。记录长度

class Solution {
public:
int longestConsecutive(vector<int> &num) {
int size = num.size();
if( size == 0 ) return 0;
unordered_set<int> st;
int ans = 1;

for(int i = 0 ; i < size ; i++)
st.insert(num[i]);

for(int i = 0 ; i < size ; i++)
{
int n = num[i];
int tmp = 1;
//left
st.erase(n);
while(st.find(n - 1) != st.end()){
tmp ++;
n--;
st.erase(n);
}
n = num[i];
while(st.find(n + 1) != st.end()){
tmp ++;
n++;
st.erase(n);
}

if(tmp > ans) ans = tmp;
}
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: