- 作者: 負雪明燭
- id: fuxuemingzhu
- 個人博客:http://fuxuemingzhu.cn/
題目地址: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 <= nums.length <= 10^5
0 <= k <= nums.length
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
歡迎關注負雪明燭的刷題博客,leetcode刷題800多,每道都講解了詳細寫法!
日期
2020 年 5 月 3 日 —— 天氣好熱,瞬間入夏