当前位置: 首页 > ops >正文

小白刷题 之 如何高效计算二进制数组中最大连续 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,计数器加1if (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);  // 输出: 3return 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)。

http://www.xdnf.cn/news/8027.html

相关文章:

  • jQuery Mobile 表单输入详解
  • Linux shell 正则表达式高效使用
  • 配置gem5环境:Dockerfile使用
  • Netty学习专栏(二):Netty快速入门及重要组件详解(EventLoop、Channel、ChannelPipeline)
  • 计算机网络 第三章:运输层(三)
  • AI|Java开发 IntelliJ IDEA中接入本地部署的deepseek方法
  • IDEA启动报错:Cannot invoke “org.flowable.common.engine.impl.persistence.ent
  • LESS基础用法详解
  • 智能制造:基于AI制造企业解决方案架构设计【附全文阅读】
  • Redis实战篇Day01(短信登录篇)
  • 《C++ list详解》
  • 金仓数据库主备切换故障解析,一次由相对路径引发的失败与切换流程解读
  • 抛弃传统P2P技术,EasyRTC音视频基于WebRTC打造教育/会议/远程巡检等场景实时通信解决方案
  • 数据库blog5_数据库软件架构介绍(以Mysql为例)
  • 大队项目流程
  • 流程引擎选型指南
  • VSCode推出开源Github Copilot:AI编程新纪元
  • 实战:Dify智能体+Java=自动化运营工具!
  • C++ 中的 **常变量** 与 **宏变量** 比较
  • 【TI MSP430与SD NAND:心电监测的长续航解决方案】
  • Mysql刷题之正则表达式专题
  • 程序编辑器快捷键总结
  • Spring Boot与Disruptor高性能队列整合指南
  • SpringAI 大模型应用开发篇-SpringAI 项目的新手入门知识
  • Vue3实现轮播表(表格滚动)
  • App Builder技术选型指南:从AI编程到小程序容器,外卖App开发实战
  • STM32 CAN CANAerospace
  • 我爱学算法之—— 二分查找(中)
  • MySQL迁移SSL报错
  • web实验(2)