小白刷题 之 如何高效计算二进制数组中最大连续 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)。

相关推荐
盐焗西兰花21 分钟前
鸿蒙学习实战之路-Reader Kit修改翻页方式字体大小及行间距最佳实践
学习·华为·harmonyos
颜酱33 分钟前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
QiZhang | UESTC36 分钟前
学习日记day76
学习
久邦科技43 分钟前
20个免费电子书下载网站,实现电子书自由(2025持续更新)
学习
m0_736919101 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878381 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
Gain_chance1 小时前
34-学习笔记尚硅谷数仓搭建-DWS层最近一日汇总表建表语句汇总
数据仓库·hive·笔记·学习·datagrip
DuHz1 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
Polaris北极星少女1 小时前
TRSV优化2
算法
Gain_chance2 小时前
36-学习笔记尚硅谷数仓搭建-DWS层数据装载脚本
大数据·数据仓库·笔记·学习