A. Shift Sort
问题描述
给定一个长度为 的二进制字符串 。你可以执行以下操作任意次数(包括零次):
- 选择三个索引 ,并将 处的值向右或向左循环移位。
例如,对于字符串 :
- 如果你选择 并执行右移,字符串变为 。
- 如果你选择 并执行左移,字符串变为 。
你的任务是确定将二进制字符串按非递减顺序(所有 在所有 之前)排序所需的最少操作次数。
题解
关键观察
- 操作效果:每次操作允许你循环移动三个元素,这可以用来将一个 ‘0’ 移动过两个 ‘1’,反之亦然。
- 排序目标:目标是将所有 ‘0’ 移动到前面,所有 ‘1’ 移动到后面。
- 最优策略:最少操作次数等于不在正确位置的 ‘0’ 的数量。每次操作可以交换一对 ‘0’ 和 ‘1’。