假设我们有一个整数nums和一个正整数k的数组,我们必须确定是否有可能将此数组划分为k个连续数字的集合。因此,如果可能,我们必须返回True,否则返回False。因此,如果输入类似于[1,2,3,3,4,4,5,6]且k = 4,则输出为true。这是因为,我们可以将数组划分为[1,2,3,4]和[3,4,5,6]
为了解决这个问题,我们将遵循以下步骤-
制作一张映射m,设置n:= nums数组的大小
对于以数字表示的每个元素e
将m [e]增加1
cnt:= 0
排序nums数组
当我在0到n的范围内
l:= k
当k> 0时
k:= l
如果m [x]> 0,则将m [k]的值减1,否则返回false
将x和cnt加1,并将k减1
x:= nums [i]
如果m [x – 1] = 0且m [x]> 0
当cnt = n时返回true,否则返回false
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool isPossibleDivide(vector<int>& nums, int k) {
map <int, int> m;
int n = nums.size();
for(int i = 0; i < n; i++){
m[nums[i]]++;
}
int cnt = 0;
sort(nums.begin(), nums.end());
for(int i = 0; i < n; i++){
int x = nums[i];
if(m[x - 1] == 0 && m[x] > 0){
int l = k;
while(k>0){
if(m[x] > 0){
m[x]--;
} else return false;
x++;
k--;
cnt++;
}
k = l;
}
}
return cnt == n;
}
};
main(){
vector<int> v = {1,2,3,3,4,4,5,6};
Solution ob;
cout << (ob.isPossibleDivide(v, 4));
}[1,2,3,3,4,4,5,6] 4
输出结果
1