Program to count minimum k length sublist that can be flipped to make all items of list to 0 in Python

Suppose we have a list of numbers called nums that contains 0s and 1s, and another value k representing the sublist length.

We can perform an operation where we flip a sublist of length k such that all 1s become 0s and all 0s become 1s. We need to find the minimum number of operations required to change all numbers in nums to 0s. If it's impossible, we return -1.

So, if the input is like nums = [1,1,1,0,0,1,1,1], k = 3, then the output will be 2, as we can flip the first three numbers to zero and then flip the last three numbers to zero.

Algorithm Steps

To solve this problem, we follow these steps ?

  • Initialize variables: n (size of nums), res (result counter), flipped (current flip state)

  • Create a helper array to_conv of size n filled with 0s

  • For each position i from 0 to n:

    • Update the flipped state using XOR with to_conv[i]

    • Calculate current effective value after applying flips

    • If current value is 1, we need to flip starting at position i

    • Check if flip is possible (enough elements remaining)

    • Mark the end of flip effect in to_conv array

  • Return the total number of flips needed

Example

Let us see the following implementation to get better understanding ?

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

# Test the solution
ob = Solution()
nums = [1,1,1,0,0,1,1,1]
k = 3
print("Input:", nums, "k =", k)
print("Output:", ob.solve(nums, k))
Input: [1, 1, 1, 0, 0, 1, 1, 1] k = 3
Output: 2

How It Works

The algorithm uses a greedy approach with XOR operations to track flip states efficiently:

  • flipped variable tracks the cumulative effect of all previous flips

  • to_conv array marks where flip effects should end

  • When we encounter a 1 (after applying current flips), we must start a new flip operation

  • If we can't fit a complete k-length sublist, return -1

Additional Example

# Test with different inputs
ob = Solution()

# Example 2: Impossible case
nums2 = [1, 1, 0]
k2 = 2
print("Input:", nums2, "k =", k2)
print("Output:", ob.solve(nums2, k2))

# Example 3: Already all zeros
nums3 = [0, 0, 0, 0]
k3 = 2
print("Input:", nums3, "k =", k3)
print("Output:", ob.solve(nums3, k3))
Input: [1, 1, 0] k = 2
Output: -1
Input: [0, 0, 0, 0] k = 2
Output: 0

Conclusion

This greedy algorithm efficiently solves the minimum flip problem using XOR operations to track cumulative flip effects. The time complexity is O(n) and space complexity is O(n), making it optimal for this type of bit manipulation problem.

Updated on: 2026-03-25T13:46:22+05:30

187 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements