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