求一个二维整数数组最大子数组之和,时间复杂度为N^2
本随笔只由于时间原因,我就只写写思想了
二维数组最大子数组之和,可以 引用 一维最大子数组之和 的思想
一维最大子数组之和 的思想,在本博客上有,这里就不做多的介绍了
我们有一个最初的二维数组a[n][m],找它的 最大子数组之和
1.我们先建立一个新的二维数组b[n][m]
二维数组b[j][k] 存放的是a[j][k](0<=j<n,0<=k<m) 这一点到 a[0][0] 的最大值
2。循环:从a[0][0]开始 以此是 a[0][1]、 a[0][2]……a[0][m]、
a[1][0]、 a[1][1]……a[1][m]、
a[2][0]、 a[2][1]……a[2][m]、
……
a[n][0]、 a[n][1]……a[n][m]、
具体循环工作:
当循环到a[j][k](0<=j<n,0<=k<m)
则求的是 a[j][k]到 a[0][0] 的最大值
计算方法:
b[j][k]=a[j][k]+b[j-1][k]+b[j][k-1]-b[j-1][k-1]
若b[j][k]<0,则赋值为0;
每次计算完成后,都需要与max进行比较
当然: 二位数组边缘部分循环时需要稍做调整
当然部分细节也没说到,留给大家自己考虑
#include<iostream.h>
int main()
{
int i,j;
int a[3][3]={-1,-2,1,-3,4,2,3,4,-5};
int b[3][3];
int max=a[0][0];
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<a[i][j]<<' ';
}
cout<<endl;
}
for(i=0;i<1;i++)
{
b[0][0]=a[0][0];
for(j=0;j<3;j++)
{
if(a[0][j-1]<0)
{
b[0][j]=a[0][j];
}
else
{
b[0][j]=b[0][j-1]+a[0][j];
}
}
}
for(i=1;i<3;i++)
{
for(j=0;j<1;j++)
{
if(a[i-1][0]<0)
{
b[i][0]=a[i][0];
}
else
{
b[i][0]=b[i-1][0]+a[i][0];
}
}
}
for(i=1;i<3;i++)
{
for(j=1;j<3;j++)
{
if(b[i-1][j-1]<0)
{
if(b[i-1][j]>=0&&b[i][j-1]>=0)
{
if(b[i][j-1]>=b[i-1][j])
{
b[i][j]=b[i][j-1]+a[i][j];
}
else
{
b[i][j]=b[i-1][j]+a[i][j];
}
}
else if(b[i-1][j]>=0&&b[i][j-1]<=0)
{
b[i][j]=b[i-1][j]+a[i][j];
}
else if(b[i-1][j]<=0&&b[i][j-1]>=0)
{
b[i][j]=b[i][j-1]+a[i][j];
}
else
{
b[i][j]=a[i][j];
}
}
else
{
if(b[i-1][j]>=0&&b[i][j-1]>=0)
{
b[i][j]=a[i][j]+b[i-1][j]+b[i][j-1]-b[i-1][j-1];
}
else if(b[i-1][j]>=0&&b[i][j-1]<=0)
{
b[i][j]=a[i][j]+b[i-1][j]-b[i-1][j-1];
}
else if(b[i-1][j]<=0&&b[i][j-1]>=0)
{
b[i][j]=a[i][j]+b[i][j-1]-b[i-1][j-1];
}
else
{
b[i][j]=a[i][j];
}
}
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<b[i][j]<<" ";
}
cout<<endl;
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(b[i][j]>max)
max=b[i][j];
}
}
cout<<"max="<<max<<endl;
return 0;
}
完成者: 信1205 李志岩
信1205 张新宇
求一个二维整数数组最大子数组之和,时间复杂度为N^2的更多相关文章
- 计算机二级-C语言-程序设计题-190119记录-求出一个二维数组每一列的最小值。
//编写一个函数:tt指向一个M行N列的二维数组,求出二维数组每列中最小的元素,并依次放入pp所指的一维数组中.二维数组中的数在主函数中赋予. //重难点:求出的是每一列的最小值,这里要注意,学会简化 ...
- 如何用一个for循环打印出一个二维数组
思路分析: 二维数组在内存中默认是按照行存储的,比如一个二维数组{{1,2,3,},{4,5,6}},它在内存中存储的顺序就是1.2.3.4.5.6,也就是说,对于这6个数组元素,按照从0到5给它们编 ...
- ytu 1050:写一个函数,使给定的一个二维数组(3×3)转置,即行列互换(水题)
1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 154 Solved: 112[ ...
- [CareerCup] 13.10 Allocate a 2D Array 分配一个二维数组
13.10 Write a function in C called my2DAlloc which allocates a two-dimensional array. Minimize the n ...
- new一个二维数组
.定义一个二维数组 char **array1 array1 = new char *[x]; for(i=0;i<x;++i) array1[i] = new char[y]; ...用的时候 ...
- c语言题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点
//题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小.也可能没有鞍点. // #include "stdio.h" #include <stdli ...
- poj2155一个二维树状数组
...
- php中向前台js中传送一个二维数组
在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...
- JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数
JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数 示例如下 至少需要九个元素:"A","B","C",&q ...
随机推荐
- Android kernel LOGO的更换方法
[从制作logo到LCD显示或者VGA显示logo] 1.制作logo的方法: 首先选择一个自己喜欢的图片,然后通过GIMP软件将该图片保存为.png格式, 变换方式这个就不说了(very easy) ...
- Influxdb1.2.2安装_Windows
一.文件准备 1.1 文件名称 influxdb-1.2.2_windows_amd64.zip 1.2 下载地址 https://portal.influxdata.com/downloads [注 ...
- java中GUI的awt和Swing的知识点
刚刚学习了java的GUI,写了几个程序,基本熟悉了awt和Swing,下面和大家分享一下知识点 1.JFrame的层次结构 参考:http://tieba.baidu.com/p/200421612 ...
- Doctype 文档类型,标准模式,混杂模式
HTML4.01和XHTML1.0 基于 SGML,支持DTD声明,HTML5不是,但是需要 doctype 来规范浏览器的行为. 标准模式是指,DTD声明定义了标准文档的类型后,浏览器按W3C标准解 ...
- 浅谈MVC页面之间参数传递
关于MVC页面之间的传值,有多种方式,下面,我们就Html.RenderAction 方式 和 Html.RenderPartial 方式 来给大家分享一下有什么不同. 一.Html.RenderAc ...
- python——面向对象相关
其他相关 一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 1 2 3 4 5 6 class Foo(object): pass obj = Foo( ...
- python——迭代器和生成器
1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...
- Angularjs快速入门(二)
说说上一节的例子,$scope 我们没有创建这个对象,直接绑定就能获取里面的对象,这种风格遵循了一种叫迪米特法则的设计模式. 然后angular还有一种很强大的功能叫“指令”. 就是你可以吧模板编写成 ...
- split()方法
split()方法用于把一个字符串分隔成字符串数组. 它有两个参数: separator:从参数指定的地方分隔字符串,必需: howmany:该参数可指定返回的数组的最大长度.如果设置了该参数,返回的 ...
- poj1159二维树状数组
Suppose that the fourth generation mobile phone base stations in the Tampere area operate as follows ...