int findLHS(vector<int>& nums) {
map<int,int> m;
for(auto a:nums)
m[a]++;
int res=0,pre=INT_MIN,preNum;
for(auto it=m.begin();it!=m.end();++it){
if(pre!=INT_MIN&&it->first==pre+1)
res=max(res,preNum+it->second);
pre=it->first;
preNum=it->second;
}
return res;
}
使用STL自带的next()(用于返回迭代器的下一个值)
prev()(用于返回迭代器的上一个值)
int findLHS(vector<int>& nums) {
if(!nums.size()) return 0;
map<int,int> m;
for(auto a:nums)
m[a]++;
int res=0;
for(auto it=next(m.begin());it!=m.end();++it){
auto pre=prev(it);
if(pre->first==it->first-1)
res=max(res,pre->second+it->second);
}
return res;
}
简单的方法是不需要检查相邻的map键值差值是否为1,可以根据当前键值寻找当前键值+1的键是否存在
int findLHS(vector<int>& nums) {
if(!nums.size()) return 0;
map<int,int> m;
int res=0;
for(auto a:nums)
m[a]++;
for(auto a:m)
if(m.count(a.first+1))
res=max(res,a.second+m[a.first+1]);
return res;
}