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