leetcode 23:longest-consecutive-sequence
题目描述
给定一个无序的整数类型数组,求最长的连续元素序列的长度。
例如:
给出的数组为[100, 4, 200, 1, 3, 2],
最长的连续元素序列为[1, 2, 3, 4]. 返回这个序列的长度:4
你需要给出时间复杂度在O(n)之内的算法
题目分析:
set会给放入的数组去重,本题是根据set的特性解题的。
代码如下:
1 int longestConsecutive(vector<int>& num) { 2 if(num.size() == 0) 3 return 0; 4 set<int> st(num.begin(),num.end()); 5 int count = 1; 6 for(int i = 0;i < num.size();i++) 7 { 8 int temp = num[i]; 9 if(st.count(temp) == 0) 10 continue; 11 int l = temp - 1; 12 int r = temp + 1; 13 while(st.count(l) != 0) 14 { 15 st.erase(l); 16 l--; 17 } 18 while(st.count(r) != 0) 19 { 20 st.erase(r); 21 r++; 22 } 23 count = max(count,r-l-1); 24 } 25 return count; 26 }