作者:昶曦
id:changxihou
题目地址:https://leetcode-cn.com/problems/the-k-strongest-values-in-an-array/
题目描述
给你一个由若干 0
和 1
组成的数组 nums
以及整数 k
。如果所有 1
都至少相隔 k
个元素,则返回 True
;否则,返回 False
。
示例一
输入:nums = [1,0,0,0,1,0,0,1], k = 2
输出:true
解释:每个 1 都至少相隔 2 个元素。
示例二
输入:nums = [1,0,0,1,0,1], k = 2
输出:false
解释:第二个 1 和第三个 1 之间只隔了 1 个元素。
示例三
输入:nums = [1,1,1,1,1], k = 0
输出:true
示例四
输入:nums = [0,1,0,1], k = 1
输出:true
提示:
1 <= nums.length <= 10^5
0 <= k <= nums.length
nums[i]
的值为0
或1
解题方法
快慢指针
问题点在于考虑边界条件
1、fast的指针初始值为2、slow为0
2、还有就是k是指2个1之间的距离而不是简单的index之差 所以要k+1
3、我们只需要找到最近的2个1之间的距离是否满足条件即可 如果最近的2个1都满足条件 即都满足条件
Python代码如下:
class Solution:
def kLengthApart(self, nums: List[int], k: int) -> bool:
fast =2
slow =0
l = len(nums)
while fast < l:
if nums[fast]==1:
if fast - slow <k+1:
return False
slow=fast
fast +=1
return True
欢迎关注昶曦的Github,每道都讲解了详细写法!