求一个二维整数数组最大子数组之和,时间复杂度为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 ...
随机推荐
- 博客搬到CSDN了
新博客地址: http://blog.csdn.net/enlangs
- layout_weight相关知识
之前使用layout_weight都是在layout_width或layout_height为0dp的时候,都没出现什么问题,但是无意间看到了如果设为match_parent会出现不同效果记录一下. ...
- 利用sub lr,lr,#4:程序是如何进行返回的?
1: ARM采用的是3级流水线 ARM的流水线结构为: 取指 -----> 译码 ------> 执行 ARM代码: PC PC- ...
- AM335X开发板学习系列——环境搭建(vbox虚拟机ubuntu14.04下minicom的安装和配置)
这个系列是我学习AM335X的总结. 1. ubuntu虚拟机的USB设备,选择启用usbserial 2. ubuntu虚拟机的网络,采用桥接模式,以保证开发板和ubuntu虚拟机能互相ping通 ...
- sublime前端开发工具常用技巧
ctrl+N//新建文件夹ctrl+shift+p//打开命令行!,ctrl+E//快速生成html模板ctrl+E//自动补齐ctrl+P(#@)//goto 任何地方,其中#查找元素,@查找样式c ...
- Golang分布式爬虫:抓取煎蛋文章|Redis/Mysql|56,961 篇文章
--- layout: post title: "Golang分布式爬虫:抓取煎蛋文章" date: 2017-04-15 author: hunterhug categories ...
- 自动化构建工具gulp简单介绍及使用
一.简介及安装: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快 ...
- 基于51单片机IIC通信的PCF8591学习笔记
引言 PCF8591 是单电源,低功耗8 位CMOS 数据采集器件,具有4 个模拟输入.一个输出和一个串行I2C 总线接口.3 个地址引脚A0.A1 和A2 用于编程硬件地址,允许将最多8 个器件连接 ...
- sql中的复制函数REPLICATE
REPLICATE函数: REPLICATE(字符串,次数)复制一个字符串n次 ) --输出结果:0000000000
- (转)使用string.Format需要注意的一个性能问题
今天,我在写C#代码时,突然发现一个最熟悉的陌生人 —— string.Format.在写C#代码的日子里,与它朝夕相伴,却没有真正去了解它.只知道在字符串比较多时,用它比用加号进行字符串连接效率更高 ...