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

工程师小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;
}
相关推荐
地平线开发者9 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮10 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者10 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考10 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx14 小时前
CART决策树基本原理
算法·机器学习
Wect14 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱15 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway21 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风21 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect21 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript