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

作者:昶曦

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,每道都講解了詳細寫法!

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