数组问题之一维最大字段和问题<Java实现>

如何使用cannal来做双写一致 ,而不是双向更新。 阅读详情
/**
 * 一维最大字段和问题,约定如果全部元素均是负数,
 * 则最大字段和为0(不选任何元素)。
 * @author Sking
 */
package 数组问题;

public class 一维最大子段和 {

	/**
	 * 暴力遍历求解最大字段和问题
	 * 时间复杂度为O(n^3)
	 * @param a 指定序列
	 * @return 最大字段和
	 */
	  public static int maxSum0(int[] a){
			int n=a.length-1;
			int sum=0;
			for(int i=1;i<=n;i++)
			for(int j=i;j<=n;j++){
				int thissum=0;
				for(int k=i;k<=j;i++)thissum+=a[k];
				if(thissum>sum)
					sum=thissum;
			}
			return sum;
		}
	  
		/**
		 * 改进的暴力遍历求解最大字段和问题
		 * 时间复杂度为O(n^2)
		 * @param a 指定序列
		 * @return 最大字段和
		 */
		public  static int maxSum1(int[] a) {
			int n = a.length - 1;
			int sum = 0;
			for (int i = 1; i <= n; i++) {
				int thissum = 0;
				for (int j = i; j <= n; j++) {
					thissum += a[j];
					if (thissum > sum) {
						sum = thissum;
					}

				}
			}
			return sum;
		}
		
		/**
		 * 递归分治求最大字段和问题
		 * 求一个序列的最大字段和可以递归分为左右两个字段分析,
		 * 分别求左右字段的最大字段和,以及从中间开始向两边伸展
		 * 的最大字段和,则该序列的最大字段和是它们三者之一。
		 * 时间复杂度为:O(n*log2(n))
		 * @param a 指定序列
		 * @param left 序列的左端索引
		 * @param right 序列的右端索引
		 * @return 序列的最大字段和
		 */
		public static int maxSum2(int[] a,int left, int right) {
			int sum = 0;
			if (left == right)//只有一个元素
				sum = a[left] > 0 ? a[left] : 0;
			else {
				int center = (left + right) / 2;
				//递归求左右字段的最大字段和
				int leftsum = maxSum2(a,left, center);
				int rightsum = maxSum2(a,center + 1, right);
				int s1 = 0;//从中间向左边伸展的最大字段和
				int lefts = 0;
				for (int i = center; i >= left; i--) {
					lefts += a[i];
					if (lefts > s1)
						s1 = lefts;
				}
				int s2 = 0;//从中间向右边伸展的最大字段和
				int rights = 0;
				for (int i = center + 1; i <= right; i++) {
					rights += a[i];
					if (rights > s2)
						s2 = rights;
				}
				sum = s1 + s2;
				if (sum < leftsum)
					sum = leftsum;
				if (sum < rightsum)
					sum = rightsum;
			}
			return sum;
		}
		
		/**
		 * 动态规划算法求解最大字段和问题:
		 * 假设(A[i],...,A[n-1])序列的最大字段和为all[i],
		 * (A[i],...,A[n-1])序列中包含A[i]的最大字段和为start[i],
		 * 则(A[i-1],A[i],...,A[n-1])序列的最大字段和为:
		 * max{A[i-1],A[i-1]+start[i],All[i]}.
		 * 性能:时间复杂度为O(n),辅助空间为2n
		 * 时间复杂度为:O(n)
		 * @param a 指定序列
		 * @return 最大字段和
		 */
		public  int maxSum3(int[] a) {
			int len=a.length;
			int[] start=new int[len];
			int[] all=new int[len];
			start[len-1]=a[len-1];
			all[len-1]=a[len-1];
			for(int i=len-2;i>=0;i--){
				start[i]=Math.max(a[i], a[i]+start[i+1]);
				all[i]=Math.max(start[i], all[i+1]);
			}
			return all[0];
		}
		
		/**
		 * 动态规划算法求解最大字段和问题:
		 * 假设(A[i],...,A[n-1])序列的最大字段和为all[i](存在nAll)
		 * (A[i],...,A[n-1])序列中包含A[i]的最大字段和为start[i](存在nStart)
		 * 则(A[i-1],A[i],...,A[n-1])序列的最大字段和为:
		 * max{A[i-1],A[i-1]+nStart,nAll}.
		 * 性能:时间复杂度为O(n),辅助空间为2(即O(1))
		 * 时间复杂度为:O(n)
		 * @param a 指定序列
		 * @return 最大字段和
		 */
		public  int maxSum4(int[] a) {
			int len=a.length;
			int nStart=a[len-1];
			int nAll=a[len-1];
			for(int i=len-2;i>=0;i--){
				nStart=Math.max(a[i], a[i]+nStart);
				nAll=Math.max(nStart, nAll);
			}
			return nAll;
		}
	
		/**
		 * 高效的动态规划求解最大字段和问题
		 * 时间复杂度为:O(n),辅助空间为2
		 * @param a 指定序列
		 * @return 最大字段和
		 */
		public  int maxSum5(int[] a) {
			int n = a.length;
			int sum = 0;//最大字段和
			int b = 0;//当前最大字段和
			for (int i = 0; i <n; i++) {
				if (b > 0)
					b += a[i];
				else
					b = a[i];
				if (b > sum)
					sum = b;
			}
			return sum;
		}
}

Cadence 617新手必看:用NMOS管手把手仿真出gm/Id设计曲线(附保姆级截图) 本文为Cadence 617新手提供详细的NMOS管gm/Id仿真教程,涵盖环境配置、原理图设计、仿真设置及结果分析全流程。通过保姆级截图和深度避坑指南,帮助工程师快速掌握gm/Id设计方法,优化IC设计效率。特别适合需要理解仿真原理并应用于实际设计的初学者。 阅读详情

相关推荐

动态规划法求解最大字段和问题

用动态规划法求解最大字段和问题,DEV C++环境运行,测试可用可进行多组数据测试

最大连续子序列的四种求解方法

第一种:常规的求解算法:使用三层for循环,然后进行比较得到最大值最后进行返回即可 第一层for循环确定开始的子序列的位置 第二次for循环确定结束的子序列的位置 第三层for循环进行求和相加 if判断进行求和比较返回较大的子序列的和package 最大子序列求和方法一;public class MaxSum01 { public static int MaxSum(int[]

Mr long的博客 2241

动态规划之最大字段和问题

此程序经上机调试,没有错误,下载后在VC++环境下可直接运行,大家交流一下!

最大子矩阵和 [No. 46]

前言: 今天花了很长时间,看了无数人写的帖子,但是几乎没有人把这个问题一下子说得很清楚,所以,我把这个问题按照自己的思路写出来,希望能够把这个问题讲清楚。 问题: 求一个M*N的矩阵的最大子矩阵和。 比如在如下这个矩阵中: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 拥有最大和的子矩阵为: 9 2 -4 1 -1 8 其和为15。 思路...

java开发指南博客 【转载】 2421

Orale EBS R12 AP应付模块 发票导入接口(Interface)

ap_interface_groups_s.nextval; ap_invoices_interface_s.nextval; ap_invoice_lines_interface_s.nextval; SELECT * FROM ap_invoices_interface ih; SELECT * FROM ap_invoice_lines_interface il; SELECT * FROM...

qq_41206741的博客 3316

CPRI原理及应用--基本原理

本文主要介绍CPRI的基本原理,包括CPRI的发展历程、CPRI基本协议、速率、帧结构、时延模型等

u014035968的博客 2万+

JAVA 算法之穷举法

java算法之穷举法一。什么是穷举法? 在算法中, 穷举算法是最简单的一种算法,其依赖于计算机强大的计算能力,来穷举每一种可能的情况,以达到解决问题的目的 。    穷举法基本思想是逐一列举问题所涉及的所有情形,并根据问题提出的条件检验哪些是问题的解,哪些应予排除 。 哈哈 ,是不是看不懂,这是官方解释。看不懂就对了!!            个人理解为穷举算法就是依靠强大的计算能力 对问题中所有...

BIT5工作室 9065

3DGS-to-PC实战指南:零代码实现3D高斯场景到点云/Mesh的高效转换

本文详细介绍了3DGS-to-PC工具如何实现3D高斯场景到点云/Mesh的高效转换,无需代码即可完成。通过实战案例和参数调优技巧,帮助用户快速掌握这一开源插件的使用方法,提升3D数据处理效率。特别适合建筑扫描、影视特效等领域的专业人士。

q1w3e5r7t9y的博客 274

数组操作大全<Java实现>

/** * 数组操作类 * @author Sking */ import java.util.LinkedHashSet; import java.util.Set; public class ArrayUtils { /**1.复制数组*/ //System.arraycopy(from,fromIndex,to,toIndex,count); //Xxx代表long,

别忘了初衷 576

408计算机复试专业课问答汇总

408计算机复试专业课问答汇总

weixin_45930223的博客 3698

使用Docker搭建SearXNG搜索引擎

【代码】使用Docker搭建SearXNG搜索引擎。

janthinasnail的博客 1168

2026Java面试 | Java 8、Java 21、Java 25 新特性与 Spring Boot 版本对应指南:JVM 垃圾回收、版本差异与迁移实践

Java面试 | Java 8、Java 21、Java 25 新特性与 Spring Boot 版本对应指南:JVM 垃圾回收、版本差异与迁移实践

weixin_48053866的博客 642

【ENVI初学】查看影像空间分辨率及重采样

例如,如果线段长度为900米,对应的像素数量为30个,那么影像的空间分辨率为30米。通过计算长度与像素数量的比值,即可得到影像的空间分辨率。,在弹出的对话框中,输入重采样后输出文件的xy分辨率大小。在测量结果窗口中,可以看到该线段的长度以及角度。在影像上点击并拖动鼠标,绘制一条直线段。工具,选择要重采样的影像后点击ok。,避免了插值过程中光谱信息的改变。:最近邻插值法通过选择原始影像中。在ENVI中打开影像后右键选择。指示了每个像素的地理跨度(聚合为一个新像素,通常通过。方法一:查看影像的元数据。

weixin_41619112的博客 5571

AI智能旅游推荐系统

该项目展示了Spring Boot与大语言模型(LLM)的集成方案,包含多项核心技术:通过MCP协议实现模型上下文管理,采用RAG架构增强生成效果,运用SSE实现流式响应,结合WebFlux进行响应式编程,并整合向量数据库实现文本向量化检索。项目提供了从AI集成到实时数据推送的完整解决方案,适用于需要智能交互的现代应用场景。

zouyang920的博客 350

复现Fastjson反序列化漏洞(从dnslog回显到rce再到反弹shell)

Fastjson是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。它还可以用于将JSON字符串转换为等效的Java对象,fastjson爆出多个反序列化远程命令执行漏洞,攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。......

记录并分享学习安全的知识点.. 2697

基于Spring Boot 3 + Vue 3 + UniApp的全栈高校社团管理小程序设计与实现

requestMatchers("/api/auth/**", "/doc.html", "/webjars/**", "/v3/api-docs/**").permitAll() // 公开接口。<u-search placeholder="搜索活动" v-model="searchKeyword" @search="loadActivities" :showAction="false"></u-search>R.success("活动创建成功") : R.error("活动创建失败");

2201_76125393的博客 369

SpringBoot面试八股文

Spring Boot 是在 Spring 框架基础上推出的一个快速开发框架。它的核心设计目标是简化 Spring 应用的初始搭建和开发过程,通过**“约定大于配置”的理念,“自动装配、起步依赖(starter)”**等机制,让开发者能够以最少的配置,快速创建一个独立的、生产级别的 Spring 应用程序。简单来说,Spring Boot = Spring 框架 + 自动配置 + 起步依赖 + 内嵌服务器。触发:通过注解(通常包含在中)触发自动配置流程。发现从或文件中加载所有候选的自动配置类。过滤。

韩小兔修媛史的博客 686

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Spring-AI-2.0-完整教程

本文是一份完整的Spring AI 2.0开发教程,详细介绍了如何基于智谱AI(GLM)平台实现各类AI功能。教程采用"零跳跃"设计理念,每章内容都建立在前一章基础上,确保学习路径自然连贯。 教程主要内容包括: 从基础对话功能开始,逐步实现流式输出、结构化返回、多轮对话记忆 进阶功能:函数调用、视觉理解、文生图、文生视频 核心AI技术:文本向量化、检索增强生成 综合实战:构建北邮智能问答客服系统 部署总结与全链路复盘 技术栈采用最新版本: Java 25 + Spring Boot 4.1.0 Spring

桃李不言下自成蹊 993

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java求数组的最大字段和

Java求数组的最大字段和 原问题 给定⼀个数组,求这个数组的连续⼦数组中,最⼤的那⼀段的和。 如数组[-2,1,-3,4,-1,2,1,-5,4] 的⼦段为:[-2,1]、[1,-3,4,-1]、[4,-1,2,1]、…、[-2,1,-3,4,-1,2,1,-5,4],和最⼤的是[4,1,2,1],为6。 ⼦问题 -. 只考虑第⼀个元素,则最⼤⼦段和为其本身 DP[0] = nums[0] -. 考虑前两个元素,最⼤⼦段和为 nums[0],num[1]以及 nums[0] + num[1] 中最

qq_42843172的博客 596

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

动态规划-最大子段和

算法思想:动态规划 实际问题:最大子段和 编写语言:Java 前言 最大子段和有多种解法,暴力破解法是最简单的,但时间复杂度较高,最少需要 O(n^2),未改进的算法为 O(n^3);而且暴力破解这种思路对学习算法是没有帮助的。因此个人并未实现。仅对分治法和动态规划两种思路进行了实现。分治法的解决思路详见分治法-最大子段和,分治法解决最大子段和问题需要的时间复杂度为 O(nlogn),而本篇博...

weixin_30457465的博客 448

首尾相连的二维数组的最大子数组

一、设计思路:通过综合求二维数组的最大子数组、求首尾相连的一维数组的最大子数组的算法,得出如下思路:首先将二维数组的子数组上下相加转化成许多一维数组,然后按照求首尾相连的一维数组的算法,遍历一维数组的所有子数组,求出子数组的最大值,即为首尾相连二维数组的子数组的最大值,并且在遍历过程中保留取得最大值的位置,输出二维数组的最大子矩阵。 二、代码: import java.awt.Point;...

weixin_30532369的博客 212

最大字段和问题详解

最大字段和求解 思路分析 代码实现 /*简单算法*/ int maxsize(int n,int *a,int& besti,int& bestj) { int sum=0,i,j,k; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { int thissu...

CAI_Ambassador的博客 1567

OpenCV阈值类型选择指南:从原理到工业实战

图像二值化是计算机视觉中最基础也最关键的预处理步骤,其本质是通过设定灰度决策边界,将连续色调映射为离散目标掩膜。不同阈值类型对应不同的成像假设与统计逻辑:全局阈值依赖直方图分布特性(如Otsu基于双峰、Triangle适配单峰),自适应阈值则建模局部光照变化,而TRUNC、TOZERO_INV等非标准类型在OCR保真、医学弱信号增强等场景展现出不可替代的技术价值。理解阈值背后的物理意义与鲁棒性约束,远比熟记API参数更重要——它直接决定后续检测、分割、识别模块的稳定性与精度。本文聚焦OpenCV中7类阈值机

weixin_30387423的博客 662

首尾相接最大子数组和

#include<iostream> using namespace std; #define Nu 5 int main() { int a[Nu]={1,-2,5,-3,6}; cout<<"随机产生数组为:"; for(int i=0;i<Nu;i++) cout<<a[i...

weixin_30343157的博客 182

一维数组的最大子段和

public static int maxSubArray(int a[], int n) { int sum = 0, max = -10; for (int i = 0; i < n; i++) { if (sum > 0) sum += a[i]; //用变量sum记住a[i]和a[i]之前数组元素的和。 else sum = a[i]; if (s

轻舟泛水 726

最java大子矩阵和问题_最大子矩阵问题实例解析

问题:求一个M*N的矩阵的最大子矩阵和。比如在如下这个矩阵中:0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2拥有最大和的子矩阵为:9 2-4 1-1 8其和为15。思路:首先,这个子矩阵可以是任意大小的,而且起始点也可以在任何地方,所以,要把最大子矩阵找出来,我们要考虑多种情况。假定原始矩阵的行数为M,那么对于子矩阵,它的行数可以是1到M的任何一个数,而且,对于一个K行(K...

weixin_34938347的博客 872
上一篇: 数字问题之最大公约数问题全解法归纳<Java实现>
下一篇: 数组问题之数组最值问题<Java实现>
originalIntention
博客等级 码龄14年 12粉丝 33原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值