题目:128. 最长连续序列
思路:哈希表,时间复杂度0(n)。
用集合set来实现哈希表的功能,记录所有出现的元素。然后遍历元素,细节看注释。
C++版本:
class Solution {
public:int longestConsecutive(vector<int>& nums) {// 用集合set来实现哈希表的功能,记录所有出现的元素set<int> st;for(auto x:nums){st.insert(x);}// 答案int mx=0;// 遍历集合for(auto x:st){// 如果x-1出现过,那么从x开始算,mx一定更新不了if(st.count(x-1)) continue;//统计从x开始的序列长度int ans=0;while(st.count(x)){x++;ans++;}// 维护最长的长度mx=max(mx,ans);}return mx;}
};
JAVA版本:
class Solution {public int longestConsecutive(int[] nums) {Set<Integer> st=new HashSet<>();for(var x:nums){st.add(x);}int mx=0;for(var x:st){if(st.contains(x-1)) continue;int ans=0;while(st.contains(x)){x++;ans++;}mx=Math.max(mx,ans);}return mx;}
}
GO版本:
func longestConsecutive(nums []int) int {mp:=map[int]bool{}for _,x:=range nums {mp[x]=true}mx:=0for x,_:=range mp {if mp[x-1]==true {continue}ans:=0for mp[x]==true {ans++x++}mx=max(mx,ans)}return mx;
}