题目链接https://leetcode-cn.com/problems/divide-array-in-sets-of-k-consecutive-numbers/
此题为一道贪心题目,首先将动态数组排序,然后通过map记录每个数字对应个数。然后通过两层循环,外层循环为遍历nums每个元素,然后判断当前num是否为0,不为0则需要与之对应得连续k-1个数(通过内层循环来查找),如果没有找到这些数,则直接在内层循环中返回false。判断结束后在外层循环外返回true。
感觉卡顿了一会,所以记录下这题
class Solution {
public:
bool isPossibleDivide(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
map<int,int>mapp;
mapp.clear();
for(auto it=nums.begin();it!=nums.end();it++)
{
mapp[*it]++;
}
int len=nums.size();
int Count=0;
for(int i=0;i<len;i++)
{
if(mapp[nums[i]]==0)continue;
mapp[nums[i]]--;
for(int j=1;j<k;j++)
{
if(mapp[nums[i]+j]!=0)
{
mapp[nums[i]+j]--;
}
else
{
return false;
}
}
}
return true;
}
};
方法二:
class Solution {
public:
bool isPossibleDivide(vector<int>& nums, int k) {
map<int,int>mapp;
for(int num:nums)
{
mapp[num]++;
}
for(auto it=mapp.begin();it!=mapp.end();it++)
{
int num_temp=it->first;
int col=it->second;
if(col>0)
{
auto it_next=next(it);
for(int i=1;i<k;i++,it_next++)
{
if(it_next!=mapp.end()&&it_next->first==num_temp+i&&it_next->second>=col)
it_next->second-=col;
else return false;
}
}
}
return true;
}
};