用 Python 编写程序,查找将所有 1 组合在一起所需的最少交换次数
pythonserver side programmingprogramming更新于 2026/1/15 1:48:17
假设我们有一个二进制字符串,我们必须找到在字符串的任意位置将所有 1 组合在一起所需的最少交换次数。因此,如果输入为"10101001101",则输出将为 3,因为可能的解决方案是"00000111111"。
为了解决这个问题,我们将遵循以下步骤 −
data := 给定字符串中的位列表
设置 one := 0,n:= 数据数组的长度
创建一个大小为 n 的数组 summ,并用 0 填充,设置 summ[0] := data[0]
one := one + data[0]
对于 i 在 1 到 n – 1 范围内
summ[i] := summ[i - 1] + data[i]
one := one + data[i]
ans := one
left := 0, right := one – 1
while right < n
如果 left 为 0,则 temp := summ[right],否则 temp := summ[right] –
- summ[left - 1]
ans := 最小 ans,one – temp
left right 各增加 1
返回 ans
让我们看看下面的实现以便更好地理解 −
示例
class Solution(object):
def solve(self, data):
data = list(map(int, list(data)))
one = 0
n = len(data)
summ=[0 for i in range(n)]
summ[0] = data[0]
one += data[0]
for i in range(1,n):
summ[i] += summ[i-1]+data[i]
one += data[i]
ans = one
left = 0
right = one-1
while right <n:
if left == 0:
temp = summ[right]
else:
temp = summ[right] - summ[left-1]
ans = min(ans,one-temp)
right+=1
left+=1
return ans
ob = Solution()
print(ob.solve("10101001101"))
输入
"10101001101"
输出
3
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

