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


題目地址: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

歡迎關注負雪明燭的刷題博客,leetcode刷題800多,每道都講解了詳細寫法!

日期

2020 年 5 月 3 日 —— 天氣好熱,瞬間入夏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章