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 <= 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;
    }

}

性能