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