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

相关推荐
im_AMBER9 分钟前
学习日志03 python
学习
MicroTech202514 分钟前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
今天背单词了吗98039 分钟前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
手握风云-1 小时前
优选算法的链脉之韵:链表专题
数据结构·算法·链表
Coding小公仔1 小时前
LeetCode 151. 反转字符串中的单词
开发语言·c++·算法
稳兽龙1 小时前
P1098 [NOIP 2007 提高组] 字符串的展开
c++·算法·模拟
墨小傲1 小时前
基于Linux下的vscode c/c++开发环境搭建详细教程
linux·c语言·vscode
G.E.N.1 小时前
开源!RAG竞技场(2):标准RAG算法
大数据·人工智能·深度学习·神经网络·算法·llm·rag
写个博客1 小时前
暑假算法日记第三天
算法
DKPT1 小时前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式