128.Longest Consecutive Sequence¶
Tags: Array
Hard
Links:https://leetcode.com/problems/longest-consecutive-sequence/
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
Your algorithm should run in O(n) complexity.
Example:
Input: [100, 4, 200, 1, 3, 2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.
Answer:
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_map<int, bool> used;
for (auto i : nums)
used[i] = false;
int longest = 0;
for (auto i : nums){
if (used[i])
continue;
int length = 1;
for (int j = i + 1; used.find(j) != used.end(); ++j){
used[j] = true;
++length;
}
for (int j = i - 1; used.find(j) != used.end(); --j){
used[j] = true;
++length;
}
longest = max(longest, length);
}
return longest;
}
};
解析:
如果先排序,则最优是nlogn,但是题目要求是O(n),所以采用unordered_map
,用一个bool型来记录每个数是否被使用过,对于没有被使用过的数,以它为中心向两个方向扩张。注意的一点是边界条件,longest
初值应该设为0,因为可能传入的是一个空数组。