「每日LeetCode」2021年2月3日

本文最后更新于:2023年3月19日 晚上

Lt1437. 是否所有 1 都至少相隔 k 个元素

1437. 是否所有 1 都至少相隔 k 个元素

给你一个由若干 01 组成的数组 nums 以及整数 k。如果所有 1 都至少相隔 k 个元素,则返回 True ;否则,返回 False
示例 1:

1
2
3
输入:nums = [1,0,0,0,1,0,0,1], k = 2
输出:true
解释:每个 1 都至少相隔 2 个元素。

示例 2:

1
2
3
输入:nums = [1,0,0,1,0,1], k = 2
输出:false
解释:第二个 1 和第三个 1 之间只隔了 1 个元素。

示例 3:

1
2
输入:nums = [1,1,1,1,1], k = 0
输出:true

示例 4:

1
2
输入:nums = [0,1,0,1], k = 1
输出:true

提示:

  • 1 <= nums.length <= 10^5
  • 0 <= k <= nums.length
  • nums[i] 的值为 01

思路

先找到第一个 1 的位置,然后从下一个开始遍历,如果不是 1 就令 count 加一,为一就判断 1 是否小于 k,是的话返回 false,不是将 count 置为 0,继续判断,直到遍历完毕

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
var kLengthApart = function (nums, k) {
let count = 0;
let i = 0;
while (nums[i] !== 1 && i < nums.length) i++;
for (i = i + 1; i < nums.length; i++) {
if (nums[i] === 1) {
if (count < k) return false;
count = 0;
} else {
count++;
}
}
return true;
};