剑指 Offer 42. 连续子数组的最大和:C语言解法

news2024/11/18 5:58:05

剑指 Offer 42. 连续子数组的最大和 - 力扣(Leetcode)

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。

要求时间复杂度为O(n)。

实例:

输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

        根据时间复杂度的要求:所以要求我们只能遍历组一遍,所以我们的操作必须精细。

        这里数据我们在使用三个变量来完成题目要求;

int maxSubArray(int* nums, int numsSize){

}

画图建思路:

 

         prev保存的是当前移动连续元素的最大值

        max保存的是目前数据最大的连续数据。

        i 下标在数组中移动

        初始化数据不可设置未0,为了防止数组中全部都是负数,使用我们初始化prev与max都为数组第一个元素。

        因为题目给出数据至少有一个,所以 i 从第二个元素开始防止数组只有一个数据时出错。

        当i>=numsSize时循环结束放回max数据。

开始操作

        当  i  移动到下标 1 时,比较prev+nums[1]与nums[1]的大小如果前者大就原prev+nums[1]相加赋予新prev。如果后者大放弃原prev,将nums[i]单独赋予新prev,然后将新prev与原max比较,较大值赋予新max。

        这里的prev加上下标1元素大于下标1元素,新prev=下标2。当前新prev大于原max,新max=新prev


          i继续移动,i=2,比较prev+nums[2]与nums[2]的大小,将较大数据赋予新prev。然后将新prev与原max比较,较大值赋予新max。

        这里的prev加上下标2元素大于下标2元素,新prev=原prev+下标2。当前新prev小于max,max不改变。


        i继续移动,i=3,比较prev+nums[3]与nums[3]的大小,将较大数据赋予新prev。然后将新prev与原max比较,较大值赋予新max。

        这里的prev加上下标3元素小于下标3元素,放弃之前所有累加数据,只保存当前下标3数据。当前新prev大于原max,新max=新prev


        i继续移动,i=4,比较prev+nums[4]与nums[4]的大小,将较大者赋予新prev。然后将新prev与原max比较,较大值赋予新max。

        这里的prev加上下标4元素大于下标4元素,新prev=原prev+下标4。当前新prev小于max,max不改变。


         i继续移动,i=5,比较prev+nums[5]与nums[5]的大小,将较大数据赋予新prev。然后将新prev与原max比较,较大值赋予新max。

   这里的prev加上下标5元素大于下标5元素,新prev=原prev+下标5。当前新prev大于原max,新max=新prev


   i继续移动,i=6,比较prev+nums[6]与nums[6]的大小,将较大数据赋予新prev。然后将新prev与原max比较,较大值赋予新max。

        这里的prev加上下标6元素大于下标6元素,新prev=原prev+下标6。当前新prev大于原max,新max=新prev


   i继续移动,i=7,比较prev+nums[7]与nums[7]的大小,将较大数据赋予新prev。然后将新prev与原max比较,较大值赋予新max。

        这里的prev加上下标7元素大于下标7元素,新prev=原prev+下标7。当前新prev小于max,max不改变。


    i继续移动,i=8,比较prev+nums[8]与nums[8]的大小,将较大数据赋予新prev。然后将新prev与原max比较,较大值赋予新max。

         这里的prev加上下标8元素大于下标8元素,新prev=下标8。当前新prev小于max,max不改变。


i继续移动,i超出数组访问,循环结束,时间复杂度为O(N)复合要求。返回数据max,得出答案,该数组的连续子数组的最大和为:6。

代码实现

//使用long long 长整型防止数据过大!!!
long long fun_max(long long e1,long long e2)
{
    return e1>e2?e1:e2;
}
int maxSubArray(int* nums, int numsSize){
    long long prev=nums[0];
    long long max=nums[0];
    for(int i=1;i<numsSize;i++)
    {
        prev=fun_max(prev+nums[i],nums[i]);
        max=fun_max(prev,max);
    }
    return max;
}

谢谢观看!!!!

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

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

相关文章

电子厂房照明的设计与应用

摘 要&#xff1a;本文基于节能视角对工业厂房的照明设计特点、高效照明装置节能产品选用及电气优化设计进行了分析探讨&#xff0c;具有较强的指导性和价值性&#xff0c;供借鉴参考。 关键词&#xff1a;节能&#xff1b;工业厂房&#xff1b;照明设计&#xff1b;特点&…

java反转字符串的方法

1、首先我们定义一个方法&#xff0c;用来反转字符串。用 public static void &#xff08;String&#xff09;方法初始化一个对象&#xff0c;然后使用 private static &#xff08;&#xff09;方法对该对象进行初始化&#xff0c;并检查是否有某个字符串和字符串本身相同&am…

MacBook杀毒软件CleanMyMac X4.13

CleanMyMac如何清理 Mac系统&#xff1f;Mac系统在使用过程中都会产生大量系统垃圾&#xff0c;如不需要的系统语言安装包&#xff0c;视频网站缓存文件&#xff0c;mac软件卸载残留的注册表等。 随着时间推移&#xff0c;mac系统垃圾就会越来越多&#xff0c;电脑就开始变慢变…

纳芯微携手企企通,打造全新数字化采购管理系统

近日&#xff0c;苏州纳芯微电子股份有限公司&#xff08;以下简称&#xff1a;纳芯微&#xff09;与企企通携手打造的数字化采购平台项目启动会顺利举行。双方相关部门领导、项目团队参加了启动会。双方一致认为本次数字化采购项目合作意义重大&#xff0c;希望共同携手&#…

ROS第四十三节——定位

https://download.csdn.net/download/qq_45685327/87725276 1.新建launch文件 关于launch文件的实现&#xff0c;在amcl功能包下的example目录已经给出了示例&#xff0c;可以作为参考&#xff0c;具体实现: roscd amcl ls examples gedit amcl_diff.launch 该目录下会列出两…

“井电双控”地下水远程计量设施-实现地下水资源合理利用

“井电双控”地下水远程计量设施&#xff08;MGTR-W4122C&#xff09;是针对取水计量控制系统开发智能终端产品。集预收费、流量监测、电量监测、余额提醒、欠费停机、无线传输、远程控制等多种功能于一体&#xff0c;并可根据项目需求选择实体IC卡和APP电子卡取水两种方式。其…

Anaconda,CUDA注意事项

2. 呜呜呜&#xff01;&#xff01;&#xff01;用别人的环境&#xff0c;如果他是非GPU版本的TF&#xff0c;你把非GPU版本的TF卸载后安装GPU版本的TF他也装不上。。。会默认给你装非GPU版本的TF&#xff01;&#xff01;&#xff01;大坑比&#xff01;&#xff01;&#xf…

手把手带你写一份优秀的开发求职简历(二)

前言 上一节我们针对简历文档名做了剖析&#xff0c;应该把哪些更醒目的简历属性放到文档名上。其实目的很简单&#xff0c;就是希望在HR手中众多的简历中&#xff0c;可以通过文档名字就抓住HR的需求点&#xff0c;让她把你的简历做为第一筛选梯队。匹配好了这一点呢&#xf…

第四章——数学知识3

高斯消元 高斯消元可以用来解方程&#xff0c;可以在n三次方的时间复杂度内&#xff0c;求多元线性方程组。 答案只有三种情况&#xff0c;无解&#xff0c;无穷多组解&#xff0c;唯一解 输入一个包含 n 个方程 n 个未知数的线性方程组。 方程组中的系数为实数。 求解这个方程…

从0~1落地接口自动化测试,让你不再手忙脚乱丨轻松入门

接口自动化测试入门教程地址&#xff1a;https://www.bilibili.com/video/BV1914y1F7Bv/? 目录&#xff1a;导读 前言 为什么要做接口测试 理解接口和接口测试 如何落地接口自动化测试 结语 前言 对于初学者而言&#xff0c;如何从零开始落地接口自动化测试是一个难点&am…

c/c++:字符串str中寻找子串substr出现的次数

c/c&#xff1a;字符串str中寻找子串substr出现的次数 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;此时学会c的话&#xff0c; 我所知道的周边的会c的同学&#xff0c;可手握10多个offer&#xff0c;随心所欲&#xff0…

LeetCode:24. 两两交换链表中的节点

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340; 算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;24. 两两交换链表中的节点 题目描述&#xff1a;给你一个链表&#x…

第二章 Unity界面认识

本章节我们来认识一下Unity的主界面&#xff0c;如下所示 Unity的主界面虽然看的内容比较多&#xff0c;但是结构上还是比较清晰地&#xff0c;所以并不乱。从上到下&#xff0c;从左到右依次是菜单栏&#xff0c;工具栏&#xff0c;层次面板&#xff08;Hierarchy&#xff09;…

Docker Compose的常用命令与docker-compose.yml脚本属性配置

Docker Compose的常用命令与配置 常见命令ps&#xff1a;列出所有运行容器logs&#xff1a;查看服务日志输出port&#xff1a;打印绑定的公共端口build&#xff1a;构建或者重新构建服务start&#xff1a;启动指定服务已存在的容器stop&#xff1a;停止已运行的服务的容器&…

Android studio 使用入门

安装 安装JDK https://www.oracle.com/java/technologies/downloads/ 新增变量JAVA_HOME&#xff0c;值为JDK安装根目录 在path中增加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 安装 Android studio https://developer.android.google.cn/studio/ 注意&#xff1a;路径尽量不要包…

区间DP (Java) 解析/模板/案例

一. 区间DP简单介绍 区间DP&#xff0c;是经常会用到的、解决区间问题的一种方法&#xff0c;经常以动态规划&#xff08;dfs/记忆化搜索&#xff09;的形式展现&#xff0c;最核心的思想就是枚举区间&#xff08;枚举端点&#xff09;&#xff0c;寻找切割点&#xff0c;处理因…

java.util.List和java.util.Set区别

最近有个需求要求查询按照单号查询顺序&#xff0c;数据库是hbase,我看了之前代码没有通过查hbase进行排序&#xff0c;就问了前端看是否前端可以排序&#xff0c;答案是前端不会做排序&#xff1b;有2个接口其中之前的接口就是这样排序的&#xff0c;于是我就按个排查看不同之…

Java每日一练(20230426)

目录 1. 天际线问题 &#x1f31f;&#x1f31f;&#x1f31f; 2. 2 的幂 &#x1f31f;&#x1f31f; 3. 对称二叉树 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

这可能是最全面的Redis面试八股文了

Redis连环40问&#xff0c;绝对够全&#xff01; Redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一个使用 C 语言编写的&#xff0c;高性能非关系型的键值对数据库。与传统数据库不同的是&#xff0c;Redis 的数据是存在内存中的&#xf…

jmeter(四)HTTP请求

启动jmeter&#xff0c;建立一个测试计划 这里再次说说怎么安装和启动jmeter吧&#xff0c;昨天下午又被人问到怎样安装和使用&#xff0c;我也是醉了&#xff1b;在我看来&#xff0c;百度能解决百分之八十的问题&#xff0c;特别是基础的问题。。。 安装&#xff1a;去官网…