題目: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;
}