1437. 是否所有 1 都至少相隔 k 个元素
题目描述
给你一个由若干 0
和 1
组成的数组 nums
以及整数 k
。如果所有 1
都至少相隔 k
个元素,则返回 true ;否则,返回 false
。
示例 1:
输入:nums = [1,0,0,0,1,0,0,1], k = 2 输出:true 解释:每个 1 都至少相隔 2 个元素。
示例 2:
输入:nums = [1,0,0,1,0,1], k = 2 输出:false 解释:第二个 1 和第三个 1 之间只隔了 1 个元素。
提示:
1 <= nums.length <= 105
0 <= k <= nums.length
nums[i]
的值为0
或1
解法
方法一:模拟
我们可以遍历数组 \(nums\),用变量 \(j\) 记录上一个 \(1\) 的下标,那么当前位置 \(i\) 的元素为 \(1\) 时,只需要判断 \(i - j - 1\) 是否小于 \(k\) 即可。如果小于 \(k\),则说明存在两个 \(1\) 之间的 \(0\) 的个数小于 \(k\),返回 false
;否则,将 \(j\) 更新为 \(i\),继续遍历数组。
遍历结束后,返回 true
。
时间复杂度 \(O(n)\),其中 \(n\) 为数组 \(nums\) 的长度。空间复杂度 \(O(1)\)。
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|