将所有vector中的值以键值的形式插入到map中,以指针的形式遍历map中的每一个值,在循环内部,以groupsize的大小循环遍历,如果在groupsize的范围内不满足递增序列或者达不到groupsize大小,则直接返回false,如果能遍历到最后,则满足,返回true。
bool isNStraightHand(vector<int>& hand, int groupSize) {
map<int,int> m;
for(int i = 0;i < hand.size();i++){
if(m.count(hand[i]) == 0){
int a = hand[i];
m.insert(make_pair(hand[i],1));
}else{
m[hand[i]]++;
}
}
int k = 0;
for(auto it = m.begin();it != m.end();it = m.begin()){
int num = 1;
auto iter = m.begin();
iter++;
for(;num < groupSize && iter != m.end();iter++,num++){
if(iter->second < it->second || iter->first != (it->first + num)){
return false;
}
iter->second = iter->second - it->second;
}
auto ite = m.begin();
m.erase(ite->first);
ite++;
int l = 0;
for(;ite != m.end() && l < groupSize;ite++,l++){
if(ite->second == 0){
m.erase(ite->first);
}
}
if(num < groupSize){
return false;
}
}
return true;
}