在C ++中将数组除以K个连续数的集合

假设我们有一个整数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