fork download
  1. def minSwaps(data):
  2. k = sum(data)
  3. n = len(data)
  4. if k == 0:
  5. return -1
  6. if k == 1:
  7. return 0 # Assuming that a single 1 is already grouped. However, example4's input may conflict.
  8. if k == n:
  9. return 0
  10.  
  11. max_ones = current_ones = sum(data[:k])
  12. for i in range(1, n - k + 1):
  13. current_ones -= data[i - 1]
  14. current_ones += data[i + k - 1]
  15. if current_ones > max_ones:
  16. max_ones = current_ones
  17.  
  18. return k - max_ones
  19.  
  20. # Test cases
  21. print(minSwaps([1,0,1,0,1])) # Example 1: Output 1
  22. print(minSwaps([0,0,0,1,1])) # Example 2: Output 0
  23. print(minSwaps([1,0,1,0,0,1,0,1])) # Example 3: Output 2 (problem's example says 3, but code gives 2)
  24. print(minSwaps([1,0,0,0])) # Returns 0, but problem's example4 says -1
Success #stdin #stdout 0.07s 14088KB
stdin
data = [1,0,1,0,1]
stdout
1
0
2
0