题目大意
给你 nnn 个数,只包含 000 与 111。
可以操作一次,选择一个区间 一定要选择。
将区间内的 111 变为 000,000 变为 111。
题意分析
问操作一次后,最多剩余多少个 111。
解题思路
我们可以记一下原序列每个区间 111 的数量,这个时候你应该要能想到前缀和。
用前缀和记录 1 ~ n 之间 111 的数量,用数组 sumsumsum 记录。
既然我能够知道每个区间 111 的数量,就能推算出 000 的数量。
比如我现在选择一个区间 [L,R][L,R][L,R],那么这个区间 000 的数量就是,(R−L+1)−(sum[R]−sum[L−1])(R - L + 1) - (sum[R] - sum[L-1])(R−L+1)−(sum[R]−sum[L−1])。
最后我们可以枚举所有的区间情况。
时间复杂度分析
求前缀和 O(n)O(n)O(n)
枚举区间 O(n2)O(n ^ 2)O(n2)
代码演示