题目
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
思路
哈希表(unordered_set)存数组,遍历哈希表,遍历到x查看x-1是否存在于哈希表中,存在即略过该元素(存在的话它会被x-1记录)。若不存在即查看哈希表中是否有x+1,且重复直到没有x+1,更新最长连续序列。
代码
class Solution {
public:int longestConsecutive(vector<int>& nums) {unordered_set<int>st;unordered_set<int>::iterator it,it2;st.clear();int ans=0;for(int i=0;i<nums.size();i++){st.insert(nums[i]);}for(it=st.begin();it!=st.end();it++){if(st.find(*it-1)==st.end()){int num=0;it2 = st.find(*it+1);while(it2!=st.end()){num+=1;it=it2;it2 = st.find(*it+1);}if(ans<num){ans=num;}}}return ans;}
};