检查所有1是否都在C ++中最短K位

假设我们有一个由0和1组成的数字num和一个整数k,我们必须检查所有1是否彼此之间至少相距k个地方,否则返回False。

因此,如果输入类似于nums = [1,0,0,0,1,0,0,1],k = 2,则输出将为true,因为每个1至少距离2个地方彼此。

为了解决这个问题,我们将遵循以下步骤-

  • 最后:= -1

  • 对于初始化i:= 0,当i <nums大小时,更新(将i增加1),执行-

    • 如果last与-1或(i-last-1)> = k相同,则-

    • 除此以外

    • 最后:=我

    • 返回假

    • 如果nums [i]与1相同,则-

    • 返回真

    例 

    让我们看下面的实现以更好地理解-

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       bool kLengthApart(vector<int>& nums, int k) {
          int last = -1;
          for (int i = 0; i < nums.size(); i++) {
             if (nums[i] == 1) {
                if (last == -1 || (i - last - 1) >= k)
                   last = i;
                else
                   return false;
             }
          }
          return true;
       }
    };
    main(){
       Solution ob;
       vector<int> v = {1,0,0,0,1,0,0,1};
       cout << (ob.kLengthApart(v, 2));
    }

    输入项

    {1,0,0,0,1,0,0,1}

    输出结果

    1