1串
题目大意
给定一个只包含01的序列,可以执行以下操作
1. 选择一个1
2. 将其移动到左边最近的0所在位置,原先位置被0填充
询问,最起码需要几次操作才可以让所有的1贴在一起。
思路解析
我们可以想到,如果想要将所有的1连在一起,那么我们则需要将在序列当中出现的第一个1与最后一个1的中间所有0都给他排除掉,才可以完成。可以将每一次操作视为是·删除·首1与尾1之间的1个0,那么最终执行的次数则为首1与尾1之间0的个数。
例如: 10001 最少操作次数3,因为首个1与尾巴的1之间存在3个空格,101010101为4,理由如上。
时间复杂度
O(n)O(n)O(n)
代码演示