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

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

相关文章:

  • 【Java Web】1.Maven
  • OpenAI 推出 Codex —— ChatGPT 内的“软件工程智能体”
  • C++:面试题汇总
  • Linux笔记---信号(下)
  • 数智读书笔记系列033《软件设计的哲学(第2版)》:复杂性管理的艺术
  • SpringCloud系列教程之Nacos实践指南
  • 平安健康2025年一季度深耕医养,科技赋能见成效
  • 移动安全与API安全
  • launch 在Kotlin 中怎么使用
  • Kotlin与Flutter:跨平台开发的互补之道与实战指南
  • 借助Azure AI Foundry 如何打造语音交互新体验
  • 一个纯粹基于jQuery和Django的SSE站内信通知的例子
  • 系统性能分析基本概念(3) : Tuning Efforts
  • element ui 表格实现单选
  • 力扣HOT100之二叉树:124. 二叉树中的最大路径和
  • 鸿蒙Flutter实战:21-混合开发详解-1-概述
  • 力扣-无重复字符的最长子串
  • 手机入网时长查询接口:精准风控与用户运营的智能利器
  • 深入理解 PlaNet(Deep Planning Network):基于python从零实现
  • ffmpeg 转换视频格式
  • 重庆平台网站建设平台/百度云盘登录电脑版
  • 这么做简单的网站/网站优化流程
  • 婚庆网站制作/网站如何快速被百度收录
  • 网络营销的特点包括哪些/广州网站优化外包
  • 开发小程序定制公司/衡阳有实力seo优化
  • 网站数据库空间/制作网站的基本步骤