目标
给你一个由若干 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 <= 10^5
- 0 <= k <= nums.length
- nums[i] 的值为 0 或 1
思路
有一个二进制数组 nums,判断是否所有 1 都至少间隔 k 个元素。
要使所有 1 都至少间隔 k 个元素,只需保证相邻的 1 间隔 k 个元素。记录上一个 1 的下标 prev,如果遇到 1 那么它们间隔元素的个数为 i - prev - 1。注意 prev 的初始化,要保证遇到第一个 1 时间隔大于等于 k。
代码
/**
* @date 2025-11-17 8:53
*/
public class KLengthApart1437 {
public boolean kLengthApart(int[] nums, int k) {
int n = nums.length;
int prev = -k - 1;
for (int i = 0; i < n; i++) {
if (nums[i] == 0) {
continue;
}
if (i - prev - 1 < k) {
return false;
}
prev = i;
}
return true;
}
}
性能
