【软件认证】比特翻转【滑动窗口】

工程师小A在对二进制码流 bits 进行验证,验证方法为:给定目标值 target(0 或 1),最多可以反转二进制码流 bits 中的一位,来获取最大连续 target 的个数,请返回该个数。

输入

第一个参数为 target,值仅为 0 或 1;

第二个参数为 bits, 1 <= bits.length <= 10000,bitsi 值仅为 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;
}
相关推荐
额,不知道写啥。2 分钟前
题解:P16710 愿望
数据结构·算法
库玛西16 分钟前
快速幂算法全景总结图:从“愚公移山”到“细胞分裂”
c语言·c++·笔记·算法
七号驿栈19 分钟前
深入理解 MAC 消息认证算法:原理、分类与应用
算法
bnmoel21 分钟前
数据结构深度剖析二叉树・下篇:链式结构的实现 ,遍历方法全解析
c语言·数据结构·算法·二叉树·
豆瓣鸡34 分钟前
算法日记 - Day5
java·算法
Accerlator40 分钟前
RAG 评测
算法
码哥DFS1 小时前
算法练习day1-备战2027届秋招
前端·javascript·数据结构·算法
wabs6661 小时前
关于图论【卡码网108.多余的边的思考】
数据结构·算法·图论
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-37 整数分解为若干项之和(C语言实现)
c语言·开发语言·数据结构·算法
运维大师2 小时前
【K8S 运维实战】31-Helm包管理
运维·算法·kubernetes