[Leetcode] Longest Consecutive Sequence

来源:互联网 发布:ubuntu安装教程双系统 编辑:程序博客网 时间:2024/04/26 20:10

Given an unsorted array of integers, find the length of the longest consecutive elements sequence.

For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.

Your algorithm should run in O(n) complexity.

O(n) 的复杂度。这道题肯定要遍历每个数,那么对每个数的操作时间就是 O(1),考虑用 hashmap。hashmap 的 find 函数复杂度在大多数时间为 O(1)。此处的 hashmap 用的是 STL 中的 unordered_map。

class Solution {public:    int longestConsecutive(vector<int> &num) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        // 空间换时间        // Map 的 find 复杂度为 Log        // Hashmap 的 find 复杂度为 O(1)                if(num.size()==0) return 0;                unordered_map <int,int> indexMap; // hashmap                int length = 0;        int maxLength = 0;                for(int i=0;i<num.size();i++)        {            indexMap[num[i]] = i;        }                vector<bool> visited(num.size(),false);                for(int i=0;i<num.size();i++)        {            if(visited[i]==true)            {                continue;            }                        visited[i] = 1;            int index = num[i]+1;            length = 1;            while(indexMap.find(index)!=indexMap.end()) // 复杂度 O(1)            {                visited[indexMap[index]] = true;                length++;                index++;                            }            index = num[i]-1;            while(indexMap.find(index)!=indexMap.end())            {                visited[indexMap[index]] = true;                length++;                index--;                            }            maxLength = max(maxLength,length);        }                return maxLength;            }};