Longest Consecutive Sequence

来源:互联网 发布:淘宝贷款可以逾期多久 编辑:程序博客网 时间:2024/06/05 07:50

描述
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.

给一个未排序的整型数组,找到最长连续的序列。
例如给 [100, 4, 200, 1, 3, 2],最长连续序列是.1.2.3.4返回长度时4
时间复杂度必须是O(n)

分析:时间复杂度有限制,不能用普通的排序算法。
用unordered_map进行存储

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)         {              int length=1;         if(used[i]==true)         continue;         used[i]=true;         //在map中找比i大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(length,longest);         }        return longest;    }};

注意是在map容器里进行查找,
长度是循环每个元素时定义的。

0 0
原创粉丝点击