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

工程师小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;
}
相关推荐
谙弆悕博士10 小时前
【附Python源码】基于决策树的信用卡欺诈检测实战
python·学习·算法·决策树·机器学习·数据分析·scikit-learn
MATLAB代码顾问10 小时前
黏菌算法(SMA)原理详解与Python实现
开发语言·python·算法
张赫轩(不重名)10 小时前
图论3:连通性问题(复杂度均为 O(N + M) )
c++·算法·图论·拓扑学
Liangwei Lin10 小时前
LeetCode 238. 除了自身以外数组的乘积
算法
啦啦啦_999910 小时前
2. ID3决策树 & C4.5决策树
算法·决策树·机器学习
技术小黑10 小时前
CNN算法实战系列02 | ResNet50V2算法实战与解析
pytorch·深度学习·算法·cnn
多加点辣也没关系10 小时前
数据结构与算法|第十五章:排序算法(下)— 非比较类排序
算法·排序算法
guo_xiao_xiao_11 小时前
YOLOv11城市道路自行车目标检测数据集-552张-bicycle-1_5
算法·yolo·目标检测
君义_noip11 小时前
CSP-J 2025 入门级 第一轮(初赛) 完善程序(1)
c++·算法·信息学奥赛·csp 第一轮