题意:
给了你一个01字符串,你可以删除字符串的头部若干元素,尾部若干元素(亦可以不删除),现在让你求一个代价,代价是剩余字符串中的0的个数和删除了的字符串中的1的个数的最大值。
思路:
根据题意是让你求最大的最小值,那么这个题就是一个二分,二分+双指针。
题目中让我们求成本,那么我们直接对成本进行二分即可,我们需要用两个数组来装0的前缀和和1的前缀和,现在来想一下二分的check函数:
我们二分的是成本,成本要么是删除了的中的1,或者是剩下的0,下面想一下双指针怎么用,这里我们用的是快慢指针,l = 0, r = 1。来看代码
/*
最大值最小
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int sum1[N], sum0[N];
string s;
int len;
bool check(int ans)
{
for