小白刷题 之 如何高效计算二进制数组中最大连续 1 的个数

前言

学习如何快速找出二进制数组中最长的连续 1 序列。

这个问题在数据处理、网络传输和算法面试中经常出现,掌握它不仅能提升编程能力,还能加深对数组操作和循环控制的理解。

🌟 问题背景

想象你是一位网络工程师,正在分析服务器日志中的二进制数据流。你需要快速识别出信号中最长的连续高电平(1)时段,以此来评估设备稳定性。这时,一段高效的 C 语言代码就能帮你轻松解决问题!

🚀 核心功能与实现

我们的目标是:给定一个二进制数组(如 [1,1,0,1,1,1]),计算其中最长的连续 1 序列的长度。以下是完整代码:

复制代码
#include <stdio.h>

int findMaxConsecutiveOnes(int* nums, int numsSize) {
    int max_count = 0;    // 记录全局最大连续1的个数
    int current_count = 0; // 记录当前连续1的个数
    for (int i = 0; i < numsSize; i++) {
        if (nums[i] == 1) {
            current_count++;  // 遇到1,计数器加1
            if (current_count > max_count) {
                max_count = current_count; // 更新最大值
            }
        } else {
            current_count = 0; // 遇到0,重置当前计数器
        }
    }
    return max_count;
}

int main() {
    int nums[] = {1, 1, 0, 1, 1, 1};
    int numsSize = sizeof(nums) / sizeof(nums[0]);
    int result = findMaxConsecutiveOnes(nums, numsSize);
    printf("最大连续1的个数是: %d\n", result);  // 输出: 3
    return 0;
}

🔍 代码详解

让我们把代码拆解成几个关键部分:

1. 变量初始化
复制代码
int max_count = 0;
int current_count = 0;

max_count:像一个 "历史记录器",保存迄今为止发现的最长连续 1 序列。

current_count:像一个 "实时计数器",记录当前正在遍历的连续 1 序列。

2. 循环遍历数组
复制代码
for (int i = 0; i < numsSize; i++) { ... }

逐个检查数组中的每个元素,就像你在检查二进制信号的每个时间点。

3. 核心逻辑:遇到 1 和 0 时的处理
复制代码
if (nums[i] == 1) {
    current_count++;
    if (current_count > max_count) {
        max_count = current_count;
    }
} else {
    current_count = 0;
}

遇到 1:当前计数器加 1,并检查是否需要更新历史记录。

遇到 0:立即重置当前计数器,准备记录下一个可能的连续 1 序列。

4. 主函数与结果输出
复制代码
int main() { ... }

初始化测试数组,调用函数,并打印结果。

🛠️ 如何运行这段代码

  1. 创建文件 :将代码复制到文本编辑器中,保存为 max_ones.c

  2. 编译代码 :打开终端,进入文件所在目录,执行:

    复制代码
    gcc max_ones.c -o max_ones
  3. 运行程序 :在终端输入:

    复制代码
    ./max_ones
  4. 查看结果 :屏幕将显示:

    复制代码
    最大连续1的个数是: 3

📚 知识点总结

数组操作

通过索引访问数组元素(nums[i])。

使用 sizeof 计算数组长度(sizeof(nums) / sizeof(nums[0]))。

循环控制

for 循环的基本用法。

条件判断

if-else 语句的应用。

算法思想

一次遍历:时间复杂度 O (n),高效处理大规模数据。

动态更新:实时维护当前状态和历史最优解。

C 语言基础

函数定义与调用(findMaxConsecutiveOnes)。标准输入输出(printf)。

相关推荐
聚客AI5 小时前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v8 小时前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工10 小时前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农11 小时前
【React用到的一些算法】游标和栈
算法·react.js
博笙困了11 小时前
AcWing学习——双指针算法
c++·算法
moonlifesudo12 小时前
322:零钱兑换(三种方法)
算法
NAGNIP1 天前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队1 天前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja1 天前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下1 天前
最终的信号类
开发语言·c++·算法