工程师小A在对二进制码流 bits 进行验证,验证方法为:给定目标值 target(0 或 1),最多可以反转二进制码流 bits 中的一位,来获取最大连续 target 的个数,请返回该个数。
输入
第一个参数为 target,值仅为 0 或 1;
第二个参数为 bits, 1 <= bits.length <= 10000,bits[i] 值仅为 0 或 1 。
输出
一个整数,表示最大连续 target 的个数
样例1
复制输入:
1 [0, 1, 1, 0, 1, 0, 1, 0, 0]
复制输出:
4
解释:
0 1 1 0 1 0 1 0 0
目标值为1,表示需要获取最大连续1的个数。
将第二个出现的0反转为1,得到0 1 1 1 1 0 1 0 0 ,获得 4 个连续的1;
其它反转获得连续1的个数最大为3,如 1 1 1 0 1 0 1 0 0 或 0 1 1 0 1 1 1 0 0 。
样例2
复制输入:
0 [0, 0, 0, 0, 0, 0, 0, 0]
复制输出:
8
解释:
不需要反转即可获得最大连续0,个数为8
cpp
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019. All rights reserved.
* Description: 上机编程认证
* Caution:本地调试时,只编译运行bit-fanzhuan.c文件,不要链接这个文件!因为本文件已经被bit-fanzhuan.c文件include了
*/
static int FindMaxConsecutiveBits(int target, const int *bits, size_t bitsSize)
{
int l = 0;
int r = 0;
int max = -1;
int revseTargetCnt = 0;
while (r < bitsSize) {
if (bits[r] == 1 - target) {
revseTargetCnt++;
}
while (revseTargetCnt > 1 && l < bitsSize) {
if (bits[l] == 1 - target) {
revseTargetCnt--;
}
l++;
}
if (max < r - l + 1) {
max = r - l + 1;
}
r++;
}
return max;
}