1437. 是否所有 1 都至少相隔 k 个元素
大约 2 分钟
--- 

1437. 是否所有 1 都至少相隔 k 个元素
- 标签:数组
- 难度:简单
题目链接
题目大意
描述:给定一个由 和 组成的数组 和一个整数 。
要求:检查数组中任意两个 之间是否至少相隔 个元素(即位置差的绝对值 )。如果所有相邻的 之间都满足条件,返回 ,否则 。
说明:
- 。
- 。
示例:
- 示例 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:一次遍历
1. 核心思想
遍历数组,记录上一个 出现的位置。当遇到新的 时,检查与上一个 的距离是否 。
2. 具体步骤
第 1 步:初始化 (表示尚未遇到 )。
第 2 步:遍历 :
- 如果 :
- 如果 且 ,返回 。
- 更新 。
第 3 步:遍历完成,返回 。
注意:题目要求相隔 个元素,即 等价于 。
3. 举例说明
以 为例:
- ,更新
- ✓,更新
- ✓,更新
返回 。
思路 1:代码
class Solution:
def kLengthApart(self, nums: List[int], k: int) -> bool:
prev = -1
for i, num in enumerate(nums):
if num == 1:
if prev != -1 and i - prev - 1 < k:
return False
prev = i
return True思路 1:复杂度分析
- 时间复杂度:,一次遍历。
- 空间复杂度:。