题目地址:https://leetcode-cn.com/problems/check-if-all-1s-are-at-least-length-k-places-away/
题目描述
给你一个由若干 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 个元素。
示例3:
输入:nums = [1,1,1,1,1], k = 0
输出:true
示例4:
输入:nums = [0,1,0,1], k = 1
输出:true
提示:
1、 1<=nums.length<=10^5
;
2、 0<=k<=nums.length
;
3、 nums[i]
的值为0
或1
;
题目大意
判断给出的数组中,是否所有的 1 的间隔都至少为 k.
解题方法
指针
看一眼题目给出的 nums 的长度,我们知道必须用 O(1) 的时间复杂度解决。
使用一次遍历,在遍历的过程中,使用 left_1 指针保存当前遍历位置左边的最后一个 1。如果当前遍历的数字也是 1,则判断一下和左边最后一个 1 的距离是否 >= k + 1。
Python 代码如下:
class Solution(object):
def kLengthApart(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: bool
"""
left_1 = float("-inf")
for i, num in enumerate(nums):
if num == 1:
if i - left_1 < k + 1:
return False
left_1 = i
return True
1 2 3 4 5 6 7 8 9 10 11 12 13 14
DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有
本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发