面试经典(6)--连续子数组最大和--二维

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

前面写了一篇一维数组求连续子数组最大和http://blog.youkuaiyun.com/getnextwindow/article/details/23958529。二维的情况会复杂很多会巧妙的借用一维的算法。

如果暴力解法,复杂度明显不尽如人意,因为求和的过程中,有很多冗余情况,所以我们可以考虑将前面求和的结果保存下来,以空间换时间,这样可以降低复杂的。设PS[i][j]是以(i,j),(1,j),(i,1),(1,1)为顶点的矩形区域的元素之和。

稍微分析一下得,PS[i][j]=PS[i-1][j]+PS[i][j-1]-PS[i-1][j-1]+A[i][j];

利用两层循环就可以递推得PS[i][j]。

我们前面提到,一维数组的连续子数组求和线性完成,我们考虑能否把二维的转换为一维。

上图就说明了问题,我们把a行c行之间的列看成一个“元素”,这样就转换成一维的情况。只要枚举a、c就可以扫描出所有矩形。

代码如下:

#define MAX 100
int A[MAX][MAX];
long long PS[MAX][MAX];


long long MatrixSum(int a,int c,int i)
{
	return PS[c][i]-PS[c][i-1]-PS[a-1][i]+PS[a-1][i-1];
}

int find_max(int n,int m)
{
	int a,c,i,j;
	for(i=1;i<=m;i++)
		PS[0][i]=0;
	for(j=1;j<=n;j++)
		PS[j][0]=0;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			PS[i][j]=PS[i-1][j]+PS[i][j-1]-PS[i-1][j-1]+M[i][j];
	int maxval=INT_MIN; 
	for(a=1;a<=n;a++)
	{
		for(c=a;c<=n;c++)
		{
			long long curSum=MatrixSum(a,c,1);
			long long maxsum=INT_MIN;
			for(i=1;i<=m;i++)
			{
				if(curSum<=0)
					curSum=MatrixSum(a,c,i);
				else
					curSum+=MatrixSum(a,c,i);
				if(curSum>maxsum)
					maxsum=curSum;
			}
			if(maxsum>maxval)
				maxval=maxsum;
		}
	}
	return maxval;
}

参考: http://blog.youkuaiyun.com/linyunzju/article/details/7723730

一维、二维 最大连续子数组和 算法导论中的一个题目,上次面试题中被扩展到了二维和二维环形数组,记录下以供参考。 阅读详情

相关推荐

告别昂贵硬件!用Unity3D 2023 + ROS2 Humble搭建你的第一个SLAM仿真实验室(保姆级教程)

本文提供了一份详细的教程,介绍如何使用Unity3D 2023和ROS2 Humble搭建SLAM仿真实验室,无需昂贵硬件即可实现虚拟传感器模拟和算法测试。通过Docker容器配置、ROS2安装优化及Unity插件集成,开发者可以快速构建高精度的仿真环境,适用于自主导航、多传感器标定等场景。

weixin_42526353的博客 433

53.最大子数组和-leetcode-python解法(二维DP或者一维)

53.最大子数组和-leetcode-python解法(二维DP或者一维)

u013373155的博客 703

PYNQ开发板使用-使用DMA进行数据搬移(Simple DMA transfer 模式)

该篇是学习使用PYNQ开发板,实际上是对ZYNQ PL端AXI_CDMA 核的应用。实验步骤参照官网的教程,一步一步地做,但是由于在硬件资源布置方面与官方教程稍有出入,所以在SDK的源码里也进行了修改。 AXI_CDMA特性: 如果是使用ZYNQ 7系列芯片(可能其他Xilinx也是通用的),xilinx的AXI_CDMA 核有两种传输模式:轮询(poll)和中断(...

YGLeeeon的博客 3521

最大子矩阵:二维数组的最大连续子数组和

上篇讲了一维的连续子数组和的最大值(编程之美错误分析),下面来分析二维数组的最大子数组和,亦称最大子矩阵, 穷举法: //求二维数组的连续子数组之和的最大值   int MaxSum(int (*array)[N])   {    int i,j;    int MaxSum=-INFINITY;//初始化    int imin,imax,jmin,jmax;    for(imin=1;im

彦祖老师 3755

手把手教你用ArduPilot搭建低成本无人车(附APM飞控+有刷电调配置清单)

本文提供了一份基于ArduPilot开源平台搭建低成本智能无人车的详细实战指南。核心内容包括APM架构飞控的选型、双向有刷电调的兼容性配置与校准、系统连接逻辑,以及通过Mission Planner地面站进行参数调校和自主导航功能设置的完整流程,帮助爱好者快速实现从手动控制到自主行驶的跨越。

java5的博客 849

基于毫米波生物感知雷达+STM32设计的独居老人居家监护系统(微信小程序)(192)

当前基于STM32设计的独居老人居家监护系统为独居老人提供一种简便、实时的健康监护服务。该系统通过集成多种传感器和功能模块,能够实时监测老人的生理指标、姿态以及室内环境状况,并通过微信小程序远程显示数据,当出现异常情况时及时发出报警提醒。

1万+

连续子数组的最大和问题(一维和二维)To the Max (POJ 1050)

一维数组的连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 这是一个典型的DP问题,递推公式是DP(i) = max{DP(i-1) + A(i),A(i)} 解释:DP(i)代表末尾元素为A(i)的连续子数组的最大和。这个地推公式来自于一个显而易见的事实:在遍历数组的

huanyingtianhe的专栏 1838

学Simulink--机器人基础关节控制场景实例:基于Simulink的无刷直流电机(BLDC)关节六步换相位置控制仿真

本文详细介绍了基于Simulink的BLDC六步换相位置控制仿真方法,针对机器人关节的低成本控制需求。重点阐述了霍尔定位、六步换相和位置闭环三大核心原理,通过Simulink建模实现了从霍尔信号处理到位置环控制的全流程。仿真结果表明,该系统可实现0.3°的定位精度和80ms的响应时间,满足教育机器人等应用场景需求。文章还提供了核心代码模块和参数设置方法,并探讨了转矩脉动抑制、无传感器控制等进阶优化方向,为低成本机器人关节驱动提供了实用解决方案。

amy_mhd的博客 152

最大连续子数组和--dp

最大连续子数组和--dp 最大连续子数组和   问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j&l...

泊停的博客 638

Linux安装MinIO(图文解说详细版)

最近开个新坑,就是在linux环境中操作开发环境,带大家玩转Linux,会整理出一篇Linux的专栏,欢迎大家订阅!! 富贵同学linux环境为CentOS7.8 版本。 上期跟大家说了一下OpenJDK的安装,这次说一下minio的安装 第一步,进入/opt 目录,创建minio文件夹 cd /opt mkdir minio 第二步,wget下载安装包: wget https://dl.minio.io/server/minio/release/linux-amd64/minio 第三步,进入m

编码人生 5万+

强化学习从基础到进阶-案例与实践[4]:深度Q网络-DQN、double DQN、经验回放、rainbow、分布式DQN

强化学习从基础到进阶-案例与实践[4]:深度Q网络-DQN、double DQN、经验回放、rainbow、分布式DQN

丨汀、的博客 2065

【LeetCode】连续子数组、子矩阵最大和问题

【LeetCode】连续子数组、子矩阵最大和问题 文章目录【LeetCode】连续子数组、子矩阵最大和问题连续子数组的最大和★最大子矩阵★★★最大黑方阵★★ 连续子数组的最大和★ 剑指 Offer 42. 连续子数组的最大和 【题目】输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 提示: 1 <= arr.length <= 10^5 -100 <= arr[i] <= 100 【示例】 输入: nums = [

像写诗一样优雅地写代码~ 1万+

基于AnimeGAN模型生成宫崎骏风格动漫照片

用于动画风格纹理和线条转换的灰度样式丢失;新颖的颜色重建损失,以保留内容图像的颜色;新的灰度对抗损失防止生成的图像从显示为灰度图像;使用深度可分卷积和反向残块的轻量级生成器,以实现更快的传输。实验表明,AnimeGAN可以对真实世界的照片进行变换场景动画风格的图像与高质量的动画视觉效果和显著优于最先进的风格化方法。# 生成宫崎骏风格图片 model = hub . Module('animegan_v1_hayao_60' , use_gpu = True)images:输入的图片数据。

优快云 精品推荐 3629

子数组问题

子数组的问题在面试中非常多,这里收集了一些子数组的问题,做一个总结: 1.连续子数组最大和 2.数组中最大连续递增子数组 3.数组中非连续最大递增子数组和 4.累加值为k的最长子数组,累加值不大于k的最长子数组 1. 连续子数组最大和 http://dsqiu.iteye.com/blog/1701494 连续子数组最大和,又叫最大子序列和或最大数组和,不过这里的序列好像有点不是很妥。 1....

Zuoerfeng 1916

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ssm框架搭建

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

leetcode 53. 最大子序和、面试题42. 连续子数组的最大和、面试题 16.17. 连续数列 动态规划 自下而上

leetcode 53. 最大子序和 动态规划 自下而上 人人为我递推型动规 题目: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治...

weixin_43973433的博客 401

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

[剑指offer题解][Java]连续子数组的最大和

前言 众所周知,《剑指offer》是一本“好书”。 如果你是个算法菜鸡(和我一样),那么最推荐的是先把剑指offer的题目搞明白。 对于剑指offer题解这个系列,我的写作思路是,对于看过文章的读者,能够做到: 迅速了解该题常见解答思路(偏门思路不包括在内,节省大家时间,实在有研究需求的人可以查阅其它资料) 思路尽量贴近原书(例如书中提到的面试官经常会要求不改变原数组,或者有空间限制等,尽量体现...

蛮三刀酱 533

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

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

剑指offer面试题31连续子数组的最大和

一、题目描述   HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽...

dengduoya4019的博客 151

java 最大子数组_[剑指offer题解][Java]连续子数组的最大和

前言众所周知,《剑指offer》是一本“好书”。如果你是个算法菜鸡(和我一样),那么最推荐的是先把剑指offer的题目搞明白。对于剑指offer题解这个系列,我的写作思路是,对于看过文章的读者,能够做到:迅速了解该题常见解答思路(偏门思路不包括在内,节省大家时间,实在有研究需求的人可以查阅其它资料)思路尽量贴近原书(例如书中提到的面试官经常会要求不改变原数组,或者有空间限制等,尽量体现在代码中,保...

weixin_33846508的博客 206

java连续0的个数_[剑指offer题解][Java]连续子数组的最大和

前言众所周知,《剑指offer》是一本“好书”。如果你是个算法菜鸡(和我一样),那么最推荐的是先把剑指offer的题目搞明白。对于剑指offer题解这个系列,我的写作思路是,对于看过文章的读者,能够做到:迅速了解该题常见解答思路(偏门思路不包括在内,节省大家时间,实在有研究需求的人可以查阅其它资料)思路尽量贴近原书(例如书中提到的面试官经常会要求不改变原数组,或者有空间限制等,尽量体现在代码中,保...

weixin_34177635的博客 259

连续子数组的最大和 ----《剑指offer》面试题31

题目 输入一个整形数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 思路一:遍历 从数组的第一个元素开始遍历。用nGreatestSum记录子数组的和的最大值。用nCurSum记录依次累加元素的和。如果nCurSum已经是负数,则可以将nCurSum重新赋值为当前元素的值;否则,继续累加。每遍历一个元素,将nGreat...

baboon_chen 222

最大连续子数组和 动态规划_[剑指offer]19连续子数组最大和

今天开始继续和大家坚持打卡面试非常重要算法练习---剑指offer,希望我们能一起肝。1 题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,...

weixin_39759060的博客 172

求数组的连续子数组之和的最大值(一维二维)

http://blog.youkuaiyun.com/liangbopirates/article/details/9411335 求数组的连续子数组之和的最大值 输入一个N个元素的整型数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。 例如输入的数组为-9  -3  -2  2  -1  2  5  -7  1  5,和最大的子

不积跬步无以至千里 1117

算法练习篇之:连续子数组的最大和 (数组 )

算法练习篇之:连续子数组的最大和 (数组 )题目描述解题思路代码实现总结 题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最...

香农三定律的博客 323

求连续子数组的最大和

http://blog.youkuaiyun.com/v_JULY_v/article/details/6444021# 前奏 希望更多的人能和我一样,把本狂想曲系列中的任何一道面试题当做一道简单的编程题或一个实质性的问题来看待,在阅读本狂想曲系列的过程中,希望你 能尽量暂时放下所有有关面试的一切包袱,潜心攻克每一道“编程题”,在解决编程题的过程中,好好享受编程带来的无限乐趣,与思考带来的无限激情。-

ranyongqing的专栏 560
上一篇: 面试经典(7)--连续子数组的最大值
下一篇: 面试经典(5)--二叉树最低公共祖先LCA
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值