假设我们有一个称为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