一维和二维子数组之和最大值

求数组的连续子数组之和的最大值(一维二维) 求数组的连续子数组之和的最大值 输入一个N个元素的整型数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。 例如输入的数组为-9  -3  -2  2  -1  2  5  -7  1  5,和最大的子数组为2  -1  2  5。因此输出为该子数组的和8。 可是如果都是负数的话,要返回0?还是返回最小的负数?,这个数时 阅读详情

一、约定

  1. 所谓子数组,是连续的。
  2. 只求和,不返回子数组的具体位置。
  3. 元素是整数,所以数组可能包含正整数,0,负数。

二、一维数组子数组之和的最大值

  1. 最直接的求法——暴力求解

           记sum[ i,...j ]为数组A中第i个元素到第j个元素的和(其中0<=i<=j<n)遍历所有可能的sum[ i,...j ]。

/**
 * 常规解法求一位最大字段和
 * @author DaiSong
 * @Date 2013年12月2日
 */
public class OneDimensionalWithNormalSolution {
	
	/**方法一,复杂度O(N^3)
	 * @param a
	 * @param n
	 * @return
	 */
	public static int MaxSum1(int[] a,int n){
		
		int maximum=Integer.MIN_VALUE;
		int sum;
		for(int i=0;i<n;i++){
			for(int j=i;j<n;j++){
				sum=0;
				for(int k=i;k<=j;k++){
					sum+=a[k];
				}
				if(sum>maximum){
					maximum=sum;
				}
			}
		}
		return maximum;
	}
	
	/**
	 * 方法二,改进:将算法的最后一个for循环省略,避免重复计算,复杂度O(N^2).
	 * @param a
	 * @param n
	 * @return
	 */
	public static int MaxSum2(int[] a,int n){
		int maximum=Integer.MIN_VALUE;
		int sum;
		for(int i=0;i<n;i++){
			sum=0;
			for(int j=i;j<n;j++){
				sum+=a[j];
				if(sum>maximum){
					maximum=sum;
				}
			}
		}
		return maximum;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[]={0,-2,3,5,-1,2};
		int b[]={1,-2,3,5,-3,2};
		int c[]={-9,-2,-3,-5,-3};
		//MaxSum1 Test Result
		System.out.println(MaxSum1(a, 6)+" "+MaxSum1(b, 6)+" "+MaxSum1(c, 5));
		//MaxSum2 Test Result
		System.out.println(MaxSum2(a, 6)+" "+MaxSum2(b, 6)+" "+MaxSum2(c, 5));
	}
}

       2.递归法

          将数组(A[0],...A[n-1])分为长度相等的两端数组(A[0],...A[n/2-1])和(A[n/2],...,A[N-1]),分别求出这两端数组各自的最大字段和,则数组(A[0],...A[n-1])的最大字段和为以下三种情况的最大值:

  1. (A[0],...A[n-1])的最大字段和与(A[0],...A[n/2-1])的最大字段和相同。
  2. (A[0],...A[n-1])的最大字段和与(A[n/2],...,A[N-1])的最大字段和相同。
  3. (A[0],...A[n-1])的最大字段和跨过其中间两个元素A[n/2-1]到A[n/2]。

/**
 * 分治策略求一维最大字段和,时间复杂度为O(N*log2N),(以2为底)
 * @author DaiSong
 * @Date 2013年12月2日
 */
public class OneDimensionalWithDivideAndConquer {
	
	public static int FindMaxSubArray(int[] a ,int low,int high){
		int leftSum=0,rightSum=0,crossSum=0;
		if(low==high){
			return a[low];
		}
		int mid=(low+high)/2;
		leftSum=FindMaxSubArray(a,low,mid);
		rightSum=FindMaxSubArray(a,mid+1,high);
		crossSum=FindMaxCrossSubArray(a,low,mid,high);
		return Math.max(Math.max(leftSum, rightSum),crossSum);
	}
	
	/**
	 * 找到跨越终点的子数组的最大值
	 * @param a
	 * @param low
	 * @param mid
	 * @param high
	 * @return
	 */
	public static int FindMaxCrossSubArray(int[] a,int low ,int mid,int high){
		int leftSum=Integer.MIN_VALUE;
		int rightSum=Integer.MIN_VALUE;
		int sum=0;
		for(int i=mid;i>=low;i--){
			sum+=a[i];
			if(sum>leftSum){
				leftSum=sum;
			}
		}
		sum=0;
		for(int i=mid+1;i<=high;i++){
			sum+=a[i];
			if(sum>rightSum){
				rightSum=sum;
			}
		}
		return leftSum+rightSum;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[]={0,-2,3,5,-1,2};
		int b[]={1,-2,3,5,-3,2};
		int c[]={-9,-2,-3,-5,-3};
		System.out.println(FindMaxSubArray(a,0,5));
		System.out.println(FindMaxSubArray(b,0,5));
		System.out.println(FindMaxSubArray(c,0,4));
	}

}

    3.DP

       考虑数组第一个元素A[0],以及最大的一段数组(A[ i ],...,A[ j ])之间的关系。有以下几种情况:

  1. 当0=i=j是,元素本身构成和的最大的一段。
  2. 当0=i<j,和最大的一段以A[0]开始。
  3. 当0<i时,元素A[0]跟和最大的一段没有关系。

/**
 * DP求解一维最大字段和问题。
 * @author DaiSong
 * @Date 2013年12月2日
 */
public class OneDimensionalWithDP {
	
	/**
	 * 方法一,逆序。时间复杂度O(N),空间复杂度O(N).
	 * @param a
	 * @param n
	 * @return
	 */
	public static int MaxSumDp1(int[] a,int n){
		int[] start=new int[n];
		int[] all=new int[n];
		start[n-1]=all[n-1]=a[n-1];
		for(int i=n-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];
	}
	
	/**
	 * 方法二,验证正序和逆序没有差别
	 * @param a
	 * @param n
	 * @return
	 */
	public static int MaxSumDp2(int[] a,int n){
		int[] start=new int[n];
		int[] all=new int[n];
		start[0]=all[0]=a[0];
		for(int i=1;i<n;i++){
			start[i]=Math.max(a[i], a[i]+start[i-1]);
			all[i]=Math.max(start[i],all[i-1]);
		}
		return all[n-1];
	}
	
	/**
	 * 方法三,空间复杂度进一步改进为O(N).
	 * @param a
	 * @param n
	 * @return
	 */
	public static int MaxSumDp3(int[] a,int n){
		int start,all;
		start=all=a[0];
		for(int i=1;i<n;i++){
			start=Math.max(a[i], a[i]+start);
			all=Math.max(start,all);
		}
		return all;
	}
	
	/**
	 * 方法四,方法三的另一种写法。
	 * @param a
	 * @param n
	 * @return
	 */
	public static int MaxSumDp4(int[] a,int n){
		int start,all;
		start=all=a[0];
		for(int i=1;i<n;i++){
			if(start<0){
				start=0;
			}
			start+=a[i];
			if(start>all){
				all=start;
			}
		}
		return all;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[]={0,-2,3,5,-1,2};
		int b[]={1,-2,3,5,-3,2};
		int c[]={-9,-2,-3,-5,-3};
		System.out.println(MaxSumDp1(a,6)+" "+MaxSumDp1(b,6)+" "+MaxSumDp1(c,5));
		System.out.println(MaxSumDp2(a,6)+" "+MaxSumDp2(b,6)+" "+MaxSumDp2(c,5));
		System.out.println(MaxSumDp3(a,6)+" "+MaxSumDp3(b,6)+" "+MaxSumDp3(c,5));
		System.out.println(MaxSumDp4(a,6)+" "+MaxSumDp4(b,6)+" "+MaxSumDp4(c,5));
	}
}



三、二维数组的最大子数组和的最大值

      1.暴力求解

         枚举矩阵的四个点,再就矩阵内的数的和。矩阵求和由于存在重复计算,可以预处理用数组存起来。

/**
 * 暴力解法及其优化求解二维最大子段和。
 * @author DaiSong
 * @Date 2013年12月2日
 */
public class TwoDimensionalWithNormalSolution {
	static int MAX = 501;
	static int[][] ps = new int[MAX][MAX];

	/**
	 * 方法一,暴力求解,时间复杂度为O(N^3*M^3)
	 * 
	 * @param a
	 * @param m
	 * @param n
	 * @return
	 */
	public static int MaxSum1(int a[][], int m, int n) {

		int max = Integer.MIN_VALUE;
		int sum;
		for (int min_i = 0; min_i < n; min_i++) {
			for (int max_i = min_i; max_i < n; max_i++) {
				for (int min_j = 0; min_j < m; min_j++) {
					for (int max_j = min_j; max_j < m; max_j++) {
						// 求区域矩阵的和
						sum = 0;
						for (int i = min_i; i <= max_i; i++) {
							for (int j = min_j; j <= max_j; j++) {
								sum += a[i][j];
							}
						}
						if (sum > max) {
							max = sum;
						}
					}
				}
			}
		}
		return max;
	}

	/**
	 * 方法二,改进:考虑到区域的和需要频繁计算,做了预处理。用ps[n][m]存放i=1..n,j=1..m区域和。
	 * 时间复杂度为O(N^2*M^2)
	 * @param a
	 * @param n
	 * @param m
	 * @return
	 */
	public static int MaxSum2(int a[][], int n, int m) {

		int max = Integer.MIN_VALUE;
		int sum;
		PieceSum(a, n, m);
		for (int min_i = 1; min_i <= n; min_i++) {
			for (int max_i = min_i; max_i <= n; max_i++) {
				for (int min_j = 1; min_j <= m; min_j++) {
					for (int max_j = min_j; max_j <= m; max_j++) {
						// 求区域矩阵的和
						sum = ps[max_i][max_j]-ps[min_i-1][max_j]-ps[max_i][min_j-1]+ps[min_i-1][min_j-1];
						if (sum > max) {
							max = sum;
						}
					}
				}
			}
		}
		return max;
	}

	/**
	 * 预处理求出区域和,时间复杂度为O(N*M)
	 * @param a
	 * @param n
	 * @param m
	 */
	public static void PieceSum(int[][] a, int n, int m) {
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				ps[i][j] = ps[i - 1][j] + ps[i][j - 1] - ps[i - 1][j - 1]
						+ a[i][j];
			}
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[][] = { { -1, -4, 3 }, { 3, 4, -1 }, { -5, -2, 8 } };
		System.out.println(MaxSum1(a, 3, 3));
		int b[][] = { {0,0,0,0},{ 0, -1, -4, 3 }, { 0, 3, 4, -1 }, { 0, -5, -2, 8 } };
		System.out.println(MaxSum2(b, 3, 3));
	}
}

         2.DP

          把二维数组压缩为一维数组,再求和。

/**
 * 最大子阵,压缩矩阵为一维数组,转化为求最大字段和问题,运用动态规划求解。
 * @author DaiSong
 * @Date 2013年12月2日
 */
public class TwoDimensionalWithDP {
	 
	 /**转化为一位数组,求一维数组的最大字段和。时间复杂度O(N*M*Min(N,M))
	 * @param a
	 * @param n
	 * @param m
	 * @return
	 */
	public static int TwoMaxSum(int a[][],int n,int m){
		 int minMax;
		 int  Max = Integer.MIN_VALUE;  
	     for (int i=0; i<n; i++){
	         minMax = OneMaxSum(a[i], m);  
	         if (minMax > Max)
	        	 Max = minMax;  
	         for (int j=i+1; j<n; j++){  
	             for (int k=0; k<n; k++){  
	                 a[i][k] += a[j][k];  
	             }  
	             minMax = OneMaxSum(a[i], n);  
	             if (minMax > Max)
	            	 Max = minMax;  
	         }  
	     }  
	     return Max;
	 }
	 
	 /**一维最大字段和
	 * @param a
	 * @param n
	 * @return
	 */
	public static int OneMaxSum(int[] a,int n){
			int start,all;
			start=all=a[0];
			for(int i=1;i<n;i++){
				start=Math.max(a[i], a[i]+start);
				all=Math.max(start,all);
			}
			return all;
		}
	
	 public static void main(String[] args) {
		 int[][] a ={{-1,-4,3},{3,4,-1},{-5,-2,8}};
	     System.out.print(TwoMaxSum(a,3,3));  
	 }  
}


参考资料:《编程之美》,《算法导论》。

www.gavinboo.com同步发布。

编程之美2.15——二维子数组之和的最大值 问题: 1. 求二维数组(矩阵)的子矩阵之和的最大值。 2. 求三维数组(长方体)的子方体之和的最大值。 解法: 先计算出以左上角的元素(1,1)和当前元素(i,j)为顶点对的子矩阵的部分和,部分和的计算如下 PS[i][j] = A[i][j]+PS[i-1][j]+PS[i][j-1]-PS[i-1][j-1] 在上一篇文章中我们发现一维的解答可以线性完成,这里我们把问题从 阅读详情

相关推荐

一维、二维 最大连续子数组和

算法导论中的一个题目,上次面试题中被扩展到了二维和二维环形数组,记录下以供参考。

some demo 1311

单调栈,求解 数组区间中最小数*区间和的最大值

题目描述: 思路来源: 求数组中区间中最小数*区间所有数和的最大值 原文写的很好,本文附上Java版本代码,以及自己的注释理解 public int getMaxSum(int[] nums) { int maxSum = Integer.MIN_VALUE; int[] preSum = getPreSumArr(nums); // 维持一个单调栈,存下标。 栈内下标对应元素单调非递减 LinkedList<Integer> s

Unknownfuture的博客 535

解题笔记(1)——子数组之和的最大值

求子数组之和的最大值是一个很经典的问题。问题的描述如下:一个有N个整形数的一维数组(A[0], A[1], ... A[n-1]),这个数组有很多子数组,那么子数组之和的最大值是什么呢?          这个问题的解答其实在《编程珠玑》一书有的。一共是4中方法:第一种是穷举法

wuzhekai的专栏 4352

贪心算法:寻找最优方案,分配问题、区间覆盖问题、最大子列和问题等

贪心算法:寻找最优方案,分配问题、区间覆盖问题、最大子列和问题等

habe33的博客 2827

告别CPU空转!用STC8的SPI+DMA高效驱动上百颗WS2812B灯珠

本文详细解析了如何利用STC8单片机的SPI+DMA外设高效驱动WS2812B全彩灯珠,解决传统软件延时驱动方式在长灯带应用中的性能瓶颈。通过硬件方案设计、数据格式转换和DMA传输配置,实现高达400Hz的刷新率和低于5%的CPU占用率,适用于大规模灯光项目。

weixin_30847939的博客 397

(遇到问题)(已解决)word敲入的公式转化为mathtype

https://www.mathtype.cn/wenti/wordgongshi-zhuanhuan.html 现在越来越多的人在文档中编辑公式的时候会选择MathType来编辑,因为它包含有众多的数学符号和模板,编辑公式时非常方便。但是也有一些人在编辑公式时没有使用MathType公式编辑器,直接使用Word中自带的公式编辑器来编辑的。当我们需要要共享一份文件的时候,这种用自带公式编辑器编辑出来的文件,在我们安装有MathType公式编辑器的电脑里打开时,双击公式没有反应,是无法对它们进行修改的.

计算机视觉 1万+

编程之美:求数组的子数组之和的最大值

1.问题描述 一个有N个整数元素的一维数组( A[0], A[1], ... , A[n-2], A[n-1]),子数组之和的最大值是什么?(要求子数组的元素是连续的) 例子:有数组( -2, 5, 3, -6, 4, -8, 6),则其子数组之和的最大值为8,其对应的数组为(5,3)   2.分析与解法 解法一:采用直接法,记Sum[i...j],为数组A中从第i到第j之间所有...

weixin_33779515的博客 142

Couldn‘t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案

本文主要介绍了Couldn’t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案,希望能对使用winscp的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 方案一 2.2 方案二

weixin_43178406的博客 4万+

一维数组中最大连续子数组、二维矩阵中最大子矩阵

  共两道题,都是不难,还是记录一下: 1、在一个一维数组中,找出连续子数组的最大和:LeetCode - 53. Maximum Subarray 2、在一个二维矩阵中,找出子矩阵最大和:https://www.51nod.com/Challenge/Problem.html#problemId=1051 一、数组子数组最大和 Given an integer array nums, find...

Bob__yuan的博客 980

物理信息神经网络(PINN)文献综述 —— 原理、严格推导与优化训练策略

本章系统阐述物理信息神经网络的理论基础、主要算法改进与训练策略。内容涵盖:PINN 的数学表述与残差构造;损失与梯度的逐步推导;训练困难(梯度消失/爆炸、损失幅度不平衡、频谱偏差、采样效率低等)的定量分析;四类核心解决方案(动态损失加权、梯度归一化与预条件化、自适应采样、分阶段/分域训练)的详细推导与实现要点;以及若干关键算法的伪代码与收敛性形式结论。所有涉及推导的步骤均按顺序展开,给出必要的数学依据与结论性陈述,可直接作为教学或参考章节使用。

u012133341的博客 423

Python爬虫实战:扒取专利数据库核心信息,我用这招搞定反爬+数据结构化(附完整可运行代码)

这套爬虫方案从「实际需求」出发,解决了专利数据库抓取的核心痛点:反爬突破、数据结构化、标题创作。核心价值不在于代码多复杂,而在于「实用」——我用这套代码半天就抓取了800+条Python爬虫相关专利,比手动效率提升了几十倍。最后想说:爬虫技术的核心是「解决问题」,而不是炫技。专利数据能帮我们快速了解行业技术趋势,尤其是程序员,从专利中扒出的核心逻辑,远比零散的博客文章更系统。希望这篇实战分享能帮到有需要的小伙伴,也欢迎在评论区交流专利爬虫的更多技巧!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2129

【ACM】数组的子数组之和的最大值(二维)

#include #define MAX 100 using namespace std;   int A[MAX][MAX]; int PS[MAX][MAX]; //method1 /* 最直接的方法,当然是枚举每一个矩形区域,然后再求这个矩形区域中元素的和。时间复杂度为O(N^2 * M^2 * Sum的时间复杂度) */ int max(int x,int y) {  return (x>

玉衡 622

AXI总线详解完结篇

经过几个月的整理和发文,AXI总线详解系列正式迎来最终篇,内容基本涵盖了上一篇文章的全部内容。 所有文章的链接如下: 1、 AXI总线详解 2、AXI总线详解-总线和接口以及协议 3、AXI协议中的通道结构 4、AXI总线详解-AXI4读写操作时序及AXI4猝发地址及选择 5、AXI4交换机制 6、ZYNQ中DMA与AXI4总线-DMA简介 7、AXI总线详解-不同类型的DMA 8、AXI总线详解-DMA内部寄存器的读写方式 9、AXI总线详解-几种应用DMA的场合 10、Altera Scatter-G.

OpenFPGA的博客 5493

[编程之美] PSet2.15 子数组之和的最大值(二维)

问题描述:                           对于二维

飞扬的青春的专栏 1019

低照度与极端天气环境中的YOLOv8优化:CPA-Enhancer网络的应用与分析

为了克服上述问题,本文提出了一种名为的网络改进方案。CPA-Enhancer通过引入链式思考机制和改进的注意力机制,有效地提升了YOLOv8在低照度和复杂天气下的表现。本文提出了针对低照度和恶劣天气条件下目标检测的YOLOv8改进方案——CPA-Enhancer链式思考网络。通过引入低照度图像增强和多尺度特征融合技术,CPA-Enhancer显著提高了YOLOv8在低光照、雾霾、雨雪等环境下的检测性能。实验结果表明,CPA-Enhancer相较于原始YOLOv8,在多个指标上都有显著的提升,尤其是在mAP。

博客 1566

基于PyQt5和OpenCV的传统图像分割应用UI程序

主要功能包括:加载和显示图像应用多种图像分割算法调整算法参数保存处理结果。

Henry的博客 473

二维数组的子数组之和的最大值

对于一维的数组,要求其子数组之和的最大值很简单,动态规划轻松解决,复杂度O(N) 代码如下: #include using namespace std; int MaxSum(int a[],int n) { int start = a[0]; int max = a[0]; for(int i=1;i<n;i++) { if(start<0) start = 0;

ButterflyDRM的专栏 766

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

POJ 1050 求最大子矩阵和 动态规划

在王晓东算法书上有讲解,是最大子序列和问题的拓广 #include &lt;iostream&gt; using namespace std; int rec[102][102]; int b[100]; int main(){ int n,k,s,sum,max; int i,j; cin&gt;&gt;n; for (i = 0;i &lt; n;i++) fo...

Coding for Dreams 123

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

子矩阵和的最大值

本博客只是为了记录我刚了解的算法思想。 首先是考虑一维的情况:      可以这样想从第一个元素扫到最后一个,不断的维护最大值sum。当扫到第 i 个元素的时候,子数组的和要 么加上这个元素,要么从这个元素从新开始。当前面i-1的子数组的和 小于0,那么加上第i个元素,会比直接用第i个元素开始小。相反,如果前面i-1的子数组之和是>=0,那么加上第i 个元素肯定不会比用第i个元素重新开始

dashuye4的专栏 2203

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

返回一个二维整数数组中最大子数组的和

输入一个二维整形数组,数组里有正数也有负数 二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和 求所有子数组的和的最大值。 #include <iostream>#include <time.h>using namespace std;#define M 4#define N 8 void mai...

weixin_30685029的博客 83

二维子数组之和的最大值

二维子数组之和的最大值 我们在前面分析了一维数组的子数组之和最大值的问题(详情请见博客:子数组之和的最大值),以及它的一些扩展问题(详情请见博客:最大子数组和的扩展问题),那么如果是二维数组又该如何求呢??? 解法一: 最直接的方法当然是直接枚举每一个矩形区域,然后再求这个矩形区域中元素的和。 #include #include #define MAX 1005 #define INF 0

奋起的Coder。。。 1425

课堂练习;返回一个二维数组中最大子数组的和

1、要求: 输入一个二维整形数组,数组里有正数也有负数。 二维数组首尾相接,象个一条首尾相接带子一样。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 2、结对开发要求: 两人结对完成编程任务。 一人主要负责程序分析,代码编程。 一人负责代码复审和代码测试计划。 发表一篇博客文章讲述两人合作中的过程、体...

weixin_30677073的博客 153

【经典专题】从一维到二维——从最大子数组到最大子矩阵

由简入难,先从最简单的问题的入手吧: 给出一个整形数组,问最大子数组的和是多少?要求数组连续。 输入样例:nums = [-3,4,-1,2,1,-5,4] 输出样例:6,即连续子数组[4,-1,2,1]的和最大 思路很简单: 可以DP,但没必要。可以这样理解:当之前已有的数组和大于0时,则它必然对于此时的和有贡献,因此在其基础上累加(if sum > 0 : sum += nums[i]);当之前已有的数组和小于0时,则此时应该另起炉灶(if sum < 0 : sum = nums[i])。

丧心病狂Loli控的博客 2438

子数组之和最大值(二维数组)

子数组之和最大值

Jarvan_Song的博客 1806
上一篇: 2013 蓝桥杯校内选拔赛 java本科B组(题目+答案)
下一篇: 用于不相交集合的数据结构——查并集
TaiSung
博客等级 码龄15年 49粉丝 132原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值