在Python中查找翻转k位后最长的1集合的长度
假设我们有一个二进制列表,在这里只有1和0可用,我们还有另一个数字k。我们最多可以将k个0设置为1,我们必须找到包含所有1的最长子列表的长度。
因此,如果输入是nums = [0,1,1,0,0,1,1] k = 2,则输出将为6,因为我们可以将中间的两个0设置为1,然后列表变为[0,1,1,1,1,1,1]。
为了解决这个问题,我们将按照以下步骤进行操作:
- 零 := 0,答案:= 0,j:= 0
- 对于nums中的每个索引i和值n,执行以下操作
- 零 := 零+(当n与0相同时为1,否则为0)
- 当零>k时,重复
- 零 := 零-(当nums [j]与0相同时为1,否则为0)
- j:= j + 1
- 如果i-j + 1>答案,则
- 答案:= i-j + 1
- 返回答案
下面是一个实现示例,以便更好地理解 –
更多Python相关文章,请阅读:Python 教程
示例
class Solution:
def solve(self, nums, k):
zeros = 0
ans = 0
j = 0
for i, n in enumerate(nums):
zeros += n == 0
while zeros > k:
zeros -= nums[j] == 0
j += 1
if i - j + 1 > ans:
ans = i - j + 1
return ans
ob = Solution()
nums = [0, 1, 1, 0, 0, 1, 1]
k = 2
print(ob.solve(nums, k))
输入
[0,1,1,0,0,1,1],2
输出
6