https://leetcode-cn.com/problems/longest-consecutive-sequence/
一开始想用一个数组,下标是值,1表示有这个值,0表示没有这个值,然后遍历这个数组。但是值的范围不知道。所以使用哈希,这样就不用管的值的范围。
第一个思路是遍历每一个数开始,直到结束,然后把结果存起来。
第二个是思路是判断每一个数的-1是否存在,如果存在,那么这个数就不是连续最大序列的开始。只从最大序列开始的地方遍历。这个好一点。不用保存什么的。
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> hashset;
unordered_map<int,int> ans_record;
int n=nums.size();
for(int i=0;i<n;i++){
hashset.insert(nums[i]);
}
int ans=0;
for(int i=0;i<n;i++){
for(int j=nums[i];;j++){
if(ans_record.count(j)!=0){
if(ans<j-nums[i]+ans_record[j]){
ans=j-nums[i]+ans_record[j];
ans_record[nums[i]]=ans;
break;
}
}
else if(hashset.count(j)==0){
if(ans<j-nums[i]){
ans=j-nums[i];
ans_record[nums[i]]=ans;
}
break;
}
}
}
return ans;
}
};
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> hashset;
int n=nums.size();
for(int i=0;i<n;i++){
hashset.insert(nums[i]);
}
int ans=0;
for(int i=0;i<n;i++){
if(hashset.count(nums[i]-1)!=0)
continue;
for(int j=nums[i];;j++){
if(hashset.count(j)==0){
if(ans<j-nums[i]){
ans=j-nums[i];
}
break;
}
}
}
return ans;
}
};