def minSwaps(data):
k = sum(data)
n = len(data)
if k == 0:
return -1
if k == 1:
return 0 # Assuming that a single 1 is already grouped. However, example4's input may conflict.
if k == n:
return 0
max_ones = current_ones = sum(data[:k])
for i in range(1, n - k + 1):
current_ones -= data[i - 1]
current_ones += data[i + k - 1]
if current_ones > max_ones:
max_ones = current_ones
return k - max_ones
# Test cases
print(minSwaps([1,0,1,0,1])) # Example 1: Output 1
print(minSwaps([0,0,0,1,1])) # Example 2: Output 0
print(minSwaps([1,0,1,0,0,1,0,1])) # Example 3: Output 2 (problem's example says 3, but code gives 2)
print(minSwaps([1,0,0,0])) # Returns 0, but problem's example4 says -1
ZGVmIG1pblN3YXBzKGRhdGEpOgogICAgayA9IHN1bShkYXRhKQogICAgbiA9IGxlbihkYXRhKQogICAgaWYgayA9PSAwOgogICAgICAgIHJldHVybiAtMQogICAgaWYgayA9PSAxOgogICAgICAgIHJldHVybiAwICAjIEFzc3VtaW5nIHRoYXQgYSBzaW5nbGUgMSBpcyBhbHJlYWR5IGdyb3VwZWQuIEhvd2V2ZXIsIGV4YW1wbGU0J3MgaW5wdXQgbWF5IGNvbmZsaWN0LgogICAgaWYgayA9PSBuOgogICAgICAgIHJldHVybiAwCiAgICAKICAgIG1heF9vbmVzID0gY3VycmVudF9vbmVzID0gc3VtKGRhdGFbOmtdKQogICAgZm9yIGkgaW4gcmFuZ2UoMSwgbiAtIGsgKyAxKToKICAgICAgICBjdXJyZW50X29uZXMgLT0gZGF0YVtpIC0gMV0KICAgICAgICBjdXJyZW50X29uZXMgKz0gZGF0YVtpICsgayAtIDFdCiAgICAgICAgaWYgY3VycmVudF9vbmVzID4gbWF4X29uZXM6CiAgICAgICAgICAgIG1heF9vbmVzID0gY3VycmVudF9vbmVzCiAgICAKICAgIHJldHVybiBrIC0gbWF4X29uZXMKCiMgVGVzdCBjYXNlcwpwcmludChtaW5Td2FwcyhbMSwwLDEsMCwxXSkpICAgICAgICMgRXhhbXBsZSAxOiBPdXRwdXQgMQpwcmludChtaW5Td2FwcyhbMCwwLDAsMSwxXSkpICAgICAgICMgRXhhbXBsZSAyOiBPdXRwdXQgMApwcmludChtaW5Td2FwcyhbMSwwLDEsMCwwLDEsMCwxXSkpICMgRXhhbXBsZSAzOiBPdXRwdXQgMiAocHJvYmxlbSdzIGV4YW1wbGUgc2F5cyAzLCBidXQgY29kZSBnaXZlcyAyKQpwcmludChtaW5Td2FwcyhbMSwwLDAsMF0pKSAgICAgICAgICMgUmV0dXJucyAwLCBidXQgcHJvYmxlbSdzIGV4YW1wbGU0IHNheXMgLTE=