傻逼题
Two-Pointer
做法就是标号,详见代码:
for (int i = 2; i <= n; i++) { if (a[i] <= a[i - 1]) l[i] = l[i - 1]; else l[i] = i;}for (int i = n - 1; i > 0; i--) { if (a[i] <= a[i + 1]) r[i] = r[i + 1]; else r[i] = i;}
然后判断r[left]是否大于l[right]就行了。
迷之数位dp?
我们可以通过2次操作对某一段0改造成连续的一串1,例如:000000->100000->011110,因此我们只需要统计有多少段连续的1即可,然后就乱搞就行了,注意一下边界情况什么的。