1437. Check If All 1's Are at Least Length K Places Away 是否所有 1 都至少相隔 k 个元素

题目地址:https://leetcode-cn.com/problems/check-if-all-1s-are-at-least-length-k-places-away/

题目描述

给你一个由若干 01 组成的数组 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]的值为01

题目大意

判断给出的数组中,是否所有的 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 弟弟快看-教程,程序员编程资料站,版权归原作者所有

本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发