程序对最小k长度子列表进行计数,可以将其翻转以使列表中的所有项在Python中变为0
假设我们有一个称为nums的数字列表,存储了0和1。我们还有另一个值k。
现在考虑有一个操作,我们翻转一个长度为k的子列表,以使所有1均为0,所有0均为1。我们必须找到将num变为全1到0所需的最少操作数。如果我们不能更改它,则返回-1。
因此,如果输入像nums=[1,1,1,0,0,1,1,1,1],k=3,则输出将为2,因为我们可以将前三个数字翻转为零,然后将最后三个数字翻转为零。
例
让我们看下面的实现以更好地理解-
class Solution:
def solve(self, nums, k):
n = len(nums)
res = 0
flipped = 0
to_conv = [0] * n
for i in range(n):
flipped ^= to_conv[i]
cur = nums[i]
cur ^= flipped
if cur == 1:
flipped ^= 1
res += 1
if i + k - 1 >= n:
return -1
if i + k < n:
to_conv[i + k] = 1
return res
ob = Solution()
nums = [1,1,1,0,0,1,1,1]
k = 3
print(ob.solve(nums, k))输入值
[1,1,1,0,0,1,1,1], 3输出结果
2