给定一个未排序的整数数组,找出最长连续序列的长度。
说明
要求你的算法复杂度为O(n)
样例
点题:思维的技巧性,一定要想清楚
给出数组[100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3, 4],返回所求长度 4
class Solution {
public:
/*
* @param num: A list of integers
* @return: An integer
*/
int longestConsecutive(vector<int> &num) {
// write your code here
if (num.size() == 0) {
return 0;
}
unordered_map<int, int> maps;
int max_len = INT_MIN;
for (int i = 0; i < num.size(); i++) {
if (maps[num[i]] == 0) {
int left = maps[num[i] - 1];
int right = maps[num[i] + 1];;
int len = left + right + 1;
max_len = max(max_len, len);
maps[num[i]] = len;
maps[num[i] - left] = len;
maps[num[i] + right] = len;
}
}
return max_len;
}
};