探索C语言:寻找数组中连续1的最大长度

在编程的世界里,我们常常会遇到各种有趣的算法问题,今天让我们来深入剖析一段C语言代码,它的功能是在给定的整数数组中找出连续1的最大长度。

 一、代码功能概述

 

这段代码定义了一个名为 findMaxConsecutiveOnes 的函数,它接受一个整数数组 nums 及其大小 numsSize 作为参数,最终返回数组中连续1的最大长度。

 

二、代码详细解析

 

1. 变量初始化

int count =0;

int a=1;

 

在这里, count 用于记录连续1的个数,初始化为0; a 用于统计数组中0的个数,初始化为1,这里初始化为1是因为后续逻辑中假设数组开头就算没有0也至少有一个“间隔段”。

 2. 统计0的个数

for(int i=0;i<numsSize;i++)

{

    if(nums[i]==0)

    {

        a++;

    }

}

 

这段 for 循环遍历整个数组 nums ,当遇到元素为0时, a 就增加1。通过这个循环,我们可以得到数组中0的个数,这将用于后续创建一个合适大小的数组来存储每段连续1的长度。

3. 动态内存分配

int*arr=(int*)malloc(a*sizeof(int));

 

利用 malloc 函数动态分配内存,创建一个大小为 a 的整数数组 arr ,这个数组将用来存储每段连续1的长度。这里使用动态内存分配是因为数组的大小依赖于数组中0的个数,而在编译时我们并不知道这个具体数值。

4. 统计连续1的长度并存储

int j=0;

for(int i=0;i<numsSize;i++)

{

    if(nums[i]==1)

    {

        count++;

    }

    if(nums[i]==0||i==numsSize-1)

    {

        arr[j++]=count;

        count=0;

    }

}

 

这段代码再次遍历数组 nums 。当遇到1时, count 递增,记录连续1的个数。当遇到0或者到达数组末尾时,将当前记录的连续1的个数 count 存入数组 arr 中,并将 count 重置为0,准备统计下一段连续1的长度。

5. 寻找最大值

int temp=0;

for(int m=0;m<a;m++)

{

    temp=arr[m]>temp?arr[m]:temp;

}

 

 

最后这段 for 循环遍历数组 arr ,通过比较,找出数组 arr 中的最大值,这个最大值就是数组 nums 中连续1的最大长度。

6. 返回结果

return temp;

将找到的连续1的最大长度返回给调用函数。

 int findMaxConsecutiveOnes(int* nums, int numsSize) 

{

    int count =0;

    int  a=1;

    for(int i=0;i<numsSize;i++)

    {

        if(nums[i]==0)

        {

            a++;

        }

    }//统计0的个数

    int*arr=(int*)malloc(a*sizeof(int));

    int j=0;

    for(int i=0;i<numsSize;i++)

    {

        if(nums[i]==1)

        {

            count++;

        }

        if(nums[i]==0||i==numsSize-1)

        {

            arr[j++]=count;

            count=0;

        }

    }//将0两侧1的个数存入数组

    int temp=0;

    for(int m=0;m<a;m++)

    {

        temp=arr[m]>temp?arr[m]:temp;

    }//查找最大值

    return temp;

}

三、代码优化与改进方向

内存管理:当前代码使用 malloc 分配内存,但没有对应的 free 释放内存,可能会导致内存泄漏。在实际应用中,需要在合适的地方释放 arr 所占用的内存。

效率优化:目前的实现方式进行了两次数组遍历,其实可以在一次遍历中同时完成统计0的个数、连续1的长度以及寻找最大值的操作,这样可以提高代码的执行效率。

四、总结

通过对这段代码的详细分析,我们深入了解了如何在C语言中通过数组遍历、动态内存分配以及条件判断等操作来解决寻找连续1的最大长度的问题。希望这篇博客能帮助你更好地理解相关算法和C语言编程技巧,在今后的编程实践中能够灵活运用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/70458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能应用-智能驾驶精确的目标检测和更高级的路径规划

实现更精确的目标检测和更高级的路径规划策略是自动驾驶领域的核心任务。以下是一个简化的示例&#xff0c;展示如何使用Python和常见的AI库&#xff08;如TensorFlow、OpenCV和A*算法&#xff09;来实现这些功能。 1. 环境准备 首先&#xff0c;确保安装了以下库&#xff1a;…

归一化与伪彩:LabVIEW图像处理的区别

在LabVIEW的图像处理领域&#xff0c;归一化&#xff08;Normalization&#xff09;和伪彩&#xff08;Pseudo-coloring&#xff09;是两个不同的概念&#xff0c;虽然它们都涉及图像像素值的调整&#xff0c;但目的和实现方式截然不同。归一化用于调整像素值的范围&#xff0c…

MySQL8.0实现MHA高可用

一、简介 MHA&#xff08;Master HA&#xff09;是一款开源的 MySQL 的高可用程序&#xff0c;它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时&#xff0c;会提升其中拥有最新数据的 slave 节点成为新的master 节点&#xf…

记录 | WPF基础学习登录界面制作

目录 前言一、普通方式Step1 创建项目Step2 设计布局Step3 对剩余布局进行内容填充可执行代码下载 Step4 编写点击事件Step5 创建新WPF窗口Step6 简单写点Index内容Step7 跳转到Index当前代码下载 二、绑定方式绑定用户名【单向绑定】双向绑定代码提供 三、MVVM方式1&#xff1…

关于32位和64位程序的传参方法及虚拟机调试工具总结

一、传参方法对比 1. 32位程序 系统调用 (Linux) 使用int 0x80指令触发系统调用 寄存器传参顺序&#xff1a; eax 系统调用号 ebx 第1个参数 ecx 第2个参数 edx 第3个参数 esi 第4个参数 edi 第5个参数 普通函数调用 (C语言) 栈传递参数&#xff1a;参数从右向左压栈…

vivado 7 系列器件时钟

7 系列器件时钟 注释&#xff1a; 本章节以 Virtex -7 时钟源为例。 Virtex-6 的时钟资源与此类似。如果使用不同的架构&#xff0c;请参阅有关器件的 《时 钟资源指南》 [ 参照 40] 。 Virtex-6 和 Virtex-7 器件内含 32 个称为 BUFG 的全局时钟缓存。 BUFG 可满…

无须付费,安装即是完全版!

不知道大家有没有遇到过不小心删掉了电脑上超重要的文件&#xff0c;然后急得像热锅上的蚂蚁&#xff1f; 别担心&#xff0c;今天给大家带来一款超给力的数据恢复软件&#xff0c;简直就是拯救文件的“救星”&#xff01; 数据恢复 专业的恢复数据软件 这款软件的界面设计得特…

Vue全流程--Vue2路由

引入路由的原因&#xff1a; 实现单页面应用&#xff08;SPA&#xff09; 什么是单页面应用&#xff1a; 1、点击跳转链接后直接在原本的页面展示。路径发生相应改变 2、整个应用只有一个完整页面 3、数据需要通过ajax获取 Vue2中的路由是什么&#xff1a; Vue2路由是一…

【图片合并转换PDF】如何将每个文件夹下的图片转化成PDF并合并成一个文件?下面基于C++的方式教你实现

医院在为患者进行诊断和治疗过程中&#xff0c;会产生大量的医学影像图片&#xff0c;如 X 光片、CT 扫描图、MRI 图像等。这些图片通常会按照检查时间或者检查项目存放在不同的文件夹中。为了方便医生查阅和患者病历的长期保存&#xff0c;需要将每个患者文件夹下的图片合并成…

Racecar Gym 总结

1.Racecar Gym 简介 Racecar Gym 是一个基于 PyBullet 物理引擎 的自动驾驶仿真平台&#xff0c;提供 Gymnasium&#xff08;OpenAI Gym&#xff09; 接口&#xff0c;主要用于强化学习&#xff08;Reinforcement Learning, RL&#xff09;、多智能体竞速&#xff08;Multi-Ag…

【实战】excel分页写入导出大文件

类 RequestMapping("export")ResponseBodypublic void export(HttpServletResponse response) {long start System.currentTimeMillis();QueryVo query new QueryVo();// response响应头setResponseHeader(response, "excel");ExcelWriter writer Excel…

基于微信小程序的医院预约挂号系统的设计与实现

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…

【机器学习】K-Nearest Neighbor KNN算法原理简介及要点

KNN算法用于分类 简介KNN分类算法的流程距离度量K值选择分类表决加权分类表决 简介 KNN的全称是K Nearest Neighbors. 这种算法可以被用来进行分类&#xff0c;原理是根据离特征点最近的K个点所属的类别进行分类。 KNN分类算法的流程 KNN算法的整体流程是我们需要将训练数据…

智体链:大语言模型协作完成长上下文任务

25年1月来自Penn State U和谷歌云的论文“Chain of Agents: Large Language Models Collaborating on Long-Context Tasks”。 解决有效处理长上下文的挑战已成为大语言模型 (LLM) 的关键问题。出现了两种常见策略&#xff1a;1&#xff09;减少输入长度&#xff0c;例如通过检…

java s7接收Byte字节,接收word转16位二进制

1图&#xff1a; 2.图&#xff1a; try {List list getNameList();//接收base64S7Connector s7Connector S7ConnectorFactory.buildTCPConnector().withHost("192.168.46.52").withPort(102).withTimeout(1000) //连接超时时间.withRack(0).withSlot(3).build()…

机器学习在癌症分子亚型分类中的应用

学习笔记&#xff1a;机器学习在癌症分子亚型分类中的应用——Cancer Cell 研究解析 1. 文章基本信息 标题&#xff1a;Classification of non-TCGA cancer samples to TCGA molecular subtypes using machine learning发表期刊&#xff1a;Cancer Cell发表时间&#xff1a;20…

Redis --- 使用HyperLogLog实现UV(访客量)

UV 和 PV 是网站或应用数据分析中的常用指标&#xff0c;用于衡量用户活跃度和页面访问量。 UV (Unique Visitor 独立访客)&#xff1a; 指的是在一定时间内访问过网站或应用的独立用户数量。通常根据用户的 IP 地址、Cookies 或用户 ID 等来唯一标识一个用户。示例&#xff1…

大学资产管理系统中的下载功能设计与实现

大学资产管理系统是高校信息化建设的重要组成部分&#xff0c;它负责记录和管理学校内所有固定资产的信息。随着信息技术的发展&#xff0c;下载功能成为提高资产管理效率的关键环节之一。 系统架构的设计是实现下载功能的基础。一个良好的系统架构能够确保数据的高效传输和存储…

Vue 3 中的 el-tooltip 详解:语法、示例及与其他框架对比

目录 前言1. 基本知识2. 实战Demo 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 1. 基本知识 el-tooltip 是 Element Plus&#xff08;Vue 3 组件库&#xff09;中的一个用于提示的组件&#xff0c;它可以在…

Android 整个屏幕可滑动,tab,viewpage是列表,tab不锁在顶

页面整体可滑动&#xff0c;包括顶部黑色控件、Tab 和列表。 步骤 1&#xff1a;主布局文件&#xff08;activity_main.xml&#xff09; <?xml version"1.0" encoding"utf-8"?> <androidx.core.widget.NestedScrollViewxmlns:android"ht…