#include<iostream> #include<vector> #include<algorithm> #include<unordered_set> using namespace std; //1,将数组用哈希表存储起来这样可以实现快速查询 //2,从数组的第一个元素开始,如果当前元素为x,那么如果在哈希表中存在x-1时直接跳过此元素 //因为当我们在遍历到x-1时肯定可以采用循环的方式来找到x //3,如果不存在x-1但是存在x+1我们采用循环的方式来找到所有的连续序列 //4,虽然for循环中嵌套了while循环,但是while循环在整个的遍历中最多遍历n次,所以总体的时间 //复杂度为o(n + n) = o(n); //5,这个过程大家模拟一下就能理解 int longestConsecutive(vector<int>& nums) { if (nums.size() == 0) return 0; unordered_set<int> m(nums.begin(), nums.end()); int maxlen = 1; int tmp; for (auto& e : nums) { tmp = e; if (m.count(e - 1) == 0) { tmp = e + 1; while (m.count(tmp)) { tmp++; } } maxlen = max(maxlen, tmp - e); } return maxlen; } int main() { int N; while(cin >> N){ vector<int> v(N); for (int i = 0; i < N; ++i) { cin >> v[i]; } cout << longestConsecutive(v)<<endl;; } return 0; }