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

工程师小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;
}
相关推荐
阳明山水20 分钟前
校准分位数驱动智能库存决策
人工智能·深度学习·算法·机器学习·架构
别动我齐刘海2 小时前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人
zhangfeng11332 小时前
《从“人工适配“到“智能生成“:KernelSwift 跨国产芯片算子迁移全栈方案解读》 —— 强调范式跃迁和跨硬件属性,适合偏架构分析的写法
人工智能·算法·华为·ai编程·npu
0+1112 小时前
算法 --滑动窗口
c++·算法·leetcode
reikocao2 小时前
大场景下 Hessian 特征值放大与退化检测
算法
hetao17338372 小时前
2026-09-18 hetao1733837 的刷题记录
c++·算法
wuyk5553 小时前
21.计数排序:不用比较的“空间换时间”排序算法
python·算法·排序算法
Rabitebla3 小时前
【Linux系统编程】 指令(二):一条路径是怎么定位到文件的
linux·c++·笔记·学习·算法
库玛西3 小时前
数据结构与算法之美:树、森林与二叉树全解析
c语言·数据结构·笔记·考研·算法·学习方法
木井巳3 小时前
【记忆化搜索】最长递增子序列
java·算法·leetcode·深度优先·剪枝·推荐算法