在 C++ 中检查所有 1 是否至少相距 K 个位置
c++server side programmingprogramming
假设我们有一个由 0 和 1 组成的数组 nums 和一个整数 k,我们必须检查所有 1 是否至少相距 k 个位置,否则返回 False。
因此,如果输入为 nums = [1,0,0,0,1,0,0,1], k = 2,则输出将为 True,因为每个 1 至少相距 2 个位置。
为了解决这个问题,我们将遵循以下步骤 −
last := -1
对于初始化 i := 0,当 i < nums 的大小,更新(将 i 增加 1),执行 −
如果 nums[i] 与 1 相同,则 −
如果 last 与 -1 相同或 (i - last - 1) >= k,则 −
last := i
否则
return false
return true
示例
让我们看下面的实现,以便更好地理解 −
#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