python题目练习 是否所有1都至少相隔k个元素 简单类型
大家不要骂我 为什么一直写简单题 因为我在同时做好几件事情 而且非常不顺利 给我气坏了
给你一个由若干 0
和 1
组成的数组 nums
以及整数 k
。如果所有 1
都至少相隔 k
个元素,则返回 true ;否则,返回 false
。
简单啊简单 直接写代码 给大家分享我的解题思路 就是如果遇到1的话 就将count设置为0 如果遇到0的话就将count+=1 count就是用来计算中间隔的0的个数是不是满足 但是我在遇到第二个1的时候 我需要看 count计数有没有达到k 但是在遇到第一个1的时候是不用考虑这样的形式的 所以我需要设置一个falg 在为false的时候只是设置count=0即可 然后设置falg为ture 这表示我现在遇到的是第一个1 我不应该0的计数问题 然后在遇到下一个1的时候 我就应该考虑计数问题了 代码如下
class Solution(object):def kLengthApart(self, nums, k):i=0count=0flag=Falsewhile i<len(nums):if nums[i]==1:if flag==False:count=0flag=Trueelse:if count>=k:count=0else:return Falseif nums[i]==0:count+=1i+=1return Truesolution=Solution() result=solution.kLengthApart( [1,0,0,1,0,1], 2) print(result)
我看其他大佬写的很妙啊 虽然是简单题 但是真的可以看出人和人之间的差别 看一下这个
class Solution(object):def kLengthApart(self, nums, k):zeros = kfor num in nums:if num == 1:if zeros < k:return Falsezeros = 0else:zeros += 1return True
真的很厉害!先将zeros 指名就是计算0的个数 设置为k 遇到一个1 如果为大于等于k那么就设置zeros为0 遇到0就+=1 那么这样既可以避免遇到第一个1的问题 也可以解决后面的1的情况 太厉害了 大家把这个方法记住啊 很牛很牛
然后再看一个可能我们不太能接受的例子:
class Solution(object):def kLengthApart(self, nums, k):""":type nums: List[int]:type k: int:rtype: bool"""start = Nonefor idx, num in enumerate(nums):if num == 1:if start is None:start = idxelse:dis = idx - start - 1if dis < k:return Falsestart = idxreturn True# print(Solution().kLengthApart([1, 0, 0, 0, 1, 0, 0, 1], 2)) # print(Solution().kLengthApart([1, 0, 0, 1, 0, 1], 2))
代码的意思是我们只看1 如果是第一次遇到这个1 那么设置start=idx 这个算是固定住 然后如果是遇到下面的1 那么就计算之间的距离 如果不够 return false 如果够了 那么就设置start=idx 继续下一次的验证
好了 如果你喜欢这个帖子 欢迎点赞收藏