53.最大子数组和

news2025/2/9 3:57:51

 贪心算法

  • 时间复杂度:代码中只有一个循环,循环次数为数组的长度,因此时间复杂度为 O(n),其中 n 是数组的长度。
  • 空间复杂度:代码中只使用了常数级别的额外空间,因此空间复杂度为 O(1)。

这段代码使用贪心算法的思想,通过遍历数组的过程中不断更新当前子数组的和,以获得最大的子数组和。

具体流程如下:

  1. 定义变量 maxAns,用于记录最大子数组和的初始值,初始化为一个极小值。
  2. 获取数组的长度,并定义变量 ans 用于存储当前子数组和的值,begin 用于记录当前子数组的起始位置,le 用于记录最大子数组和的起始位置,ri 用于记录最大子数组和的结束位置。
  3. 遍历数组,从第一个元素开始。
  4. 更新当前子数组和的值,累加当前元素到 ans
  5. 如果当前子数组和大于等于最大子数组和,则更新最大子数组和的值、起始位置和结束位置。
  6. 如果当前子数组和小于0,则将当前子数组和
func main(){
	nums:=[]int{2,6,3,4,7}
	ans:=maxSubArray(nums)
	fmt.Println(ans)
}

func maxSubArray(nums []int) int {
	maxAns := -99999999999 // 定义变量 maxAns,用于存储最大子数组和的初始值,初始化为一个极小值

	m := len(nums) // 获取数组的长度
	ans := 0       // 定义变量 ans,用于存储当前子数组和的值
	begin := 0     // 定义变量 begin,表示当前子数组的起始位置
	le := 0        // 定义变量 le,用于记录最大子数组和的起始位置
	ri := m - 1    // 定义变量 ri,用于记录最大子数组和的结束位置

	for i := 0; i < m; i++ { // 遍历数组
		ans = ans + nums[i] // 更新当前子数组和的值

		if ans >= maxAns { // 如果当前子数组和大于等于最大子数组和
			maxAns = ans // 更新最大子数组和的值
			le = begin   // 更新最大子数组和的起始位置
			ri = i       // 更新最大子数组和的结束位置
		}

		if ans < 0 { // 如果当前子数组和小于0
			ans = 0       // 将当前子数组和重置为0
			begin = i + 1 // 更新子数组的起始位置为下一个元素的位置
		}
	}

	fmt.Println(maxAns, le, ri) // 打印最大子数组和、起始位置和结束位置
	return maxAns                // 返回最大子数组和的结果
}

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

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

相关文章

QT C++入门学习(2) QT Creator写一个简单的上位机控制LED

上位机和下位机的概念 上位机&#xff1a;指的是可以直接发送操作指令的计算机或者单片机&#xff0c;一般提供用户操作交互界面并向用户展示反馈数据。 典型设备&#xff1a;电脑、平板、手机、面板、触摸屏 下位机&#xff1a;指的是与机器相连接的计算机或者单片机&#…

Studio 3T 2023.5 (macOS, Linux, Windows) - MongoDB 的专业 GUI、IDE 和 客户端

Studio 3T 2023.5 (macOS, Linux, Windows) - MongoDB 的专业 GUI、IDE 和 客户端 请访问原文链接&#xff1a;https://sysin.org/blog/studio-3t-2023/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Studio 3T&#xff0c;M…

黑客松必备|Bear Necessities Hackathon Office Hours汇总

由Moonbeam和AWS Startups联合主办的Bear Necessities Hackathon黑客松启动仪式已于5月30日举行。本次黑客松将历时约1个月的时间&#xff0c;包含6个挑战&#xff0c;分别由Moonbeam基金会、Chainlink、StellaSwap、SubQuery、Biconomy提供赞助&#xff0c;总奖池超过5万美金。…

面试软件测试时,面试官最想听到的答案是什么?

问题&#xff1a;面试软件测试时&#xff0c;面试官让你测一个软件&#xff0c;比如朋友圈&#xff0c;或者让你测试你的电脑为什么打不开网页&#xff0c;而QQ可以打开之类的&#xff0c;他最想听到的答案是什么&#xff1f; 如上所述&#xff0c;在实际面试中&#xff0c;面试…

懂点测试基础就敢要17k? 面试官:最多8K,多一分都没有...

公司前段缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-25k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是3年工作经验&#xff0c;但面试…

Java泛型的使用

1.什么是泛型&#xff1f; 所谓泛型&#xff0c;就是允许在定义类、接口时通过 一个标识 表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时&#xff08;例如&#xff0c;继承或实现这个接口&#xff0c;用这个类型声明变量、创建对象时&#…

5.Opencv-图像滤波(均值,方框,高斯,中值,双边滤波)

常见的图像滤波操作有&#xff1a; 均值滤波&#xff08;cv2.blur&#xff09; 方框滤波&#xff08;cv2.boxFilter&#xff09; 高斯滤波&#xff08;cv2.GaussianBlur&#xff09; 中值滤波&#xff08;cv2.medianBlur&#xff09; 双边滤波&#xff08;cv2.bilateralFilter…

电脑小白不要错过这五款小众但强大的软件

电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。 多语言翻译——QTranslate QTranslate是一款实用的多语言翻译工具。它可以在任何应用程序中选中文本&#…

【C++】模版进阶

目录 一、非类型模版参数二、模板的特化1、概念2、函数模版特化3、类模板特化1.全特化2.偏特化3.类模板特化应用示例 三、模版分离编译1、什么是分离编译2、模板的分离编译3、模板的优缺点 一、非类型模版参数 模版参数分为类型模版参数与非类型模版参数 类型模版参数&#x…

一定要看!带你选择适合自己的测试工具

目录 前言&#xff1a; Jmeter实现接口请求JSON断言 Postman接口请求断言 前言&#xff1a; 选择适合的测试工具对于测试人员和测试项目的成功非常重要。不同的测试工具都有其独特的优缺点&#xff0c;而且每个项目的需求也不尽相同。因此&#xff0c;在选择测试工具时&#…

使用vitepress快速搭建个人网站或官方文档网站

使用vitepress快速搭建个人网站或官方文档网站 1. vitepress是什么&#xff1f; 官方首页的介绍&#xff0c; 翻译过来就是&#xff0c;vite和vue组成的强大的静态网站构造器。简单、强大和快速&#xff0c;是你一直想要的SSG(Static Site Generator)框架。 官网地址&#…

python mitmproxy抓包库

一.简介 mitmproxy是一款用Python编写的支持HTTP(S)的中间人代理工具。它可以拦截、查看、修改、重放和保存HTTP/HTTPS流量 &#xff0c;支持命令行界面和图形界面&#xff0c;可用于安全测试、网络调试、API开发和反向工程等场景。mitmproxy具有很高的灵活性和扩展性&#xf…

GUT|IF30+的联合分析文章:宏基因加代谢组

● 代谢组学是基于LC-MS/MS液质联用技术对生物样本中的小分子代谢物进行定性和相对定量分析&#xff1b; ● 宏基因组-代谢组的联合分析可以用来解释差异菌群与差异代谢物的关联性&#xff1b; ● 从而帮助建立微生物-代谢物-表型之间的逻辑关系。 凌恩生物的宏基因组学引入了…

JS:yFiles for HTML Complete 2.5.0 Crack

yFiles for HTML Complete 是市场上最先进、最完整的图表解决方案。我们强大而灵活的 API 提供了广泛的功能——开箱即用。只需选择最符合您需求的那些。 适用于每个用例的布局 从大量预定义的布局中进行选择并配置它们以完美地适应手头的任务。 yFiles 提供业内最广泛的高质量…

Sentinel与Hystix的线程隔离有什么差别

线程隔离有两种方式实现&#xff1a; 线程池隔离&#xff08;hystix 默认采用&#xff09; 优点&#xff1a;支持主动超时&#xff0c;支持异步调用 缺点&#xff1a; 线程的额外开销比较大 场景&#xff1a; 低扇出&#xff08;服务A调用服务B这种简单的调用&#xff09;信号…

新能源共享叉车充电桩管理系统设计思路

一、充电桩系统设计思路 1、总后台端&#xff0c;电脑版 1.1运营商管理。后台可以添加运营商&#xff0c;运营商可以添加无限添加充电站、充电桩、站点合伙人、充电操作员等&#xff0c;运营商、站点合伙人均有独立的后台入口&#xff0c;可以管理和查看与当前运营商相关充电站…

测试行业干了6年,从只会点点点到了现在的测试开发,总算是证明了自己

测试不止是点点点 我感觉我是一个比较有发言权的人吧&#xff0c;我在测试行业摸爬滚打6年&#xff0c;以前经常听到开发对我说&#xff0c;天天的点点点有意思没&#xff1f; 和IT圈外的同学、朋友聊起自己的工作&#xff0c;往往一说自己是测试&#xff0c;无形中也会被大家…

如何优雅的给SpringBoot部署的jar包瘦身?

一、需求背景 我们知道Spring Boot项目&#xff0c;是可以通过java -jar 包名 启动的。 那为什么Spring Boot项目可以通过上述命令启动&#xff0c;而其它普通的项目却不可以呢&#xff1f; 原因在于我们在通过以下命令打包时 mvn clean package一般的maven项目的打包命令&…

k8s kubeadm高可用集群证书续期

1.查看证书期限 kubeadm certs check-expiration 2.更改系统时间为证书过期的时间 因为要保持集群的时间一直&#xff0c;使用xshell对多个会话同时执行以下命令 systemctl stop chrondy #停止时间同步工具 date -s 06/15/2024 #更改系统时间为证书过期后的时间 date …

2023年JDK要升级到多少?看看七家大模型给的答案

前言 在2023年很多公司应该还在用JDK8&#xff0c;目前JDK已经更新到JDK20&#xff0c;JDK21也将在2023年9月发布&#xff0c;那么在2023年如果我们要升级JDK&#xff0c;到底升级到哪个版本比较合适呢&#xff1f;这个问题我们可以交给大模型&#xff0c;看看各家大模型是怎么…