需要用到map,map和unordered_map都用于存储键值对,但是map有个天然优势就是map的key值是有序的,即若为map<int,int> counts;
分别插入数据4:1,2:3,1:2
map插入的几种方式:
counts[2] =1;
counts[4] =3;
counts.insert(pair<int,int>(1,2));
遍历counts输出键值,结果为:1,2,4
而unordered_map的键值则是无序的,与插入顺序有关;
因此本题可用map,遍历nums,依次将nums的元素作为counts的key值,之后只要遍历count的key(已有序),若当前key比前一个key大1,则意味着当前key和前一个key为连续序列
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
int result = 1;
if(nums.size()<=1) return nums.size();
map<int,int> counts;//使用map计算
//map大小动态增加,且map内数据都是有序的,key有序
for(int i=0;i<nums.size();i++){
counts[nums[i]]++;
}
//遍历map,计算最大连续序列;
int pre_num = counts.begin()->first;
int cur_count=1;
//遍历map的key,若当前key比前一个key大1,则当前key和前一个key有序
for(auto iter=counts.begin();iter!=counts.end();iter++){
if(iter->first-pre_num==1){
cur_count++;
}else{
cur_count=1;
}
pre_num = iter->first;
result = max(result,cur_count);
}
return result;
}
};