查找二维数组list[][]中的最大的子数组的和
之前做过最大一维数组子数组的和的题目,现在将数组扩展成二维:
代码如下:
#include<iostream>
#define null -858993460
using namespace std; void main()
{
int arr[]={,,,-,,-,};
int arr2[]={-,-,-,-};
int arr3[]={};
int arr4[]={,,};
int arr5[];
int a[][]={{,,-,,-,},{,-,,,-,-},{-,-,-,,,-}};
int b[][];
int c[][]={{-,-,-},{-,-,-},{-,-,-}}; int yiwei_maxsub_list(int list[],int length);
int erwei_maxsub_list(int list[][],int x,int y); cout<<"一维数组:"<<endl;
cout<<yiwei_maxsub_list(arr,)<<endl;
cout<<yiwei_maxsub_list(arr2,)<<endl;
cout<<yiwei_maxsub_list(arr3,)<<endl;
cout<<yiwei_maxsub_list(arr4,)<<endl;
cout<<yiwei_maxsub_list(arr5,)<<endl; cout<<"二维数组:"<<endl;
cout<<erwei_maxsub_list(a,,)<<endl;
cout<<erwei_maxsub_list(b,,)<<endl;
cout<<erwei_maxsub_list(c,,)<<endl; } int yiwei_maxsub_list(int list[],int length)
{
int a[]={};
int max;
int i,j;
int k=; if(list==NULL||length==)
{
cout<<"error!inter is null!";
return ;
} for(i=;i<length;i++)
{
a[k]=list[i];
for(j=i;j<length;j++)
{
a[k+]=a[k]+list[j+];
k++;
}
}
max=a[];
for(i=;i<k;i++)
{
if(max<a[i])
{
max=a[i];
} }
return max;
} int erwei_maxsub_list(int list[][],int x,int y)
{//int list[][100]={{5,6,-3,8,-9,2},{1,-12,20,0,-3,-5},{-9,-7,-3,6,7,-1}};x=3,y=6
int a[][]={};
int b[][]={};
int max,i,j,n;
int t,k;//t行扩展后的,k列扩展
if(list==NULL||x==||y==)//异常处理
{
cout<<"error!inter is null!";
return ;
} for(n=;n<x;n++)//n层(x)
{
k=;
for(i=;i<y;i++)
{
a[n][k]=list[n][i];
for(j=i;j<y;j++)
{
a[n][k+]=a[n][k]+list[n][j+];
k++;
}
}
}
t=k;
for(n=;n<t;n++)//n列(t)
{
k=;
for(i=;i<x;i++)
{
b[k][n]=a[i][n];
for(j=i;j<x;j++)
{
b[k+][n]=b[k][n]+a[j+][n];
k++; }
}
} max=list[][]; for(i=;i<k;i++)
{
for(j=;j<t;j++)
if(max<b[i][j])
{
max=b[i][j];
}
}
return max; }
截图:
时间:用时,在一维数组的前提下1小时;
方法:将二维数组参数传入函数后,函数将数组先进行行扩展,每行记录单独一行的子数组,然后列扩展,将原来的二维数组扩展为子数组和的数组,然后遍历扩展后的数组找到最大值;这样时间复杂度是(m+n)².
总结:这其实体现了敏捷开发中的问题,用户的需求不断改变,团队的效率建立在过去的基础上,迭代开发的效率会比较高。这也是现在软件开发的主流,需要团队合作,代码规范,程序结构完整,健壮性强等等。再今后的软件工程学习和运用中深入体会。
查找二维数组list[][]中的最大的子数组的和的更多相关文章
- 【剑指offer】二分查找二维数组
1 2 3 4 5 6 7 8 9 3 3 1 2 3 4 5 6 7 8 9 10 3 3 12 2 3 4 5 6 7 8 9 10 例子输出: Yes No No 时间限制:1 秒 内存限制:3 ...
- PHP使用array_filter查找二维数组中符合字段和字段值的数据集合
1.方法: /** * 获取符合字段和字段值的数组集合 * @param array $data 待过滤数组 * @param string $field 要查找的字段 * @param $value ...
- [软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文
一. 在主函数中实现二维数组的输入. 代码主要函数maxson(),主要利用for()循环先查找出最大字数组的四角的坐标xmin,xmax,ymin,ymax来确定最大子数组, 在循环中算出之和,编写 ...
- [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组
1.数组基础 1.什么是数组: 同一类型数据的集合,就是一个容器. 2.数组的好处: 可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式: (一 ...
- C#学习笔记04--排序/查找/二维数组/交叉数组
一. 冒泡排序(重点) 思路: 每次比较把较小的放在前面, 大的放到后面; 图解:下图是最坏情况下的排序 ` 冒泡排序m个元素, 就有(m-1)趟排序, 第一趟m-1次, 第二趟 m-2次.... ...
- C#6 冒泡 折半查找 二维数组
人类思维--计算机逻辑思维 逻辑思维--代码实现 写书法: 描红--临摹--碑贴--自成一体--草 章节复习: 数组:一维,二维,多维 一维:豆角.连续,同一类型. 定义:数据类型[] 数组名=new ...
- 《剑指offer》查找二维数组内元素 c++
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. cl ...
- PHP 查找二维数组中是否有指定字符串的字段
Array ( ] => Array ( [content] => 您提交了订单,请等待系统确认 :: [operator] => 客户 ) ] => Array ( [con ...
- 剑指Offer面试题:2.二维数组中的查找
一.题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
随机推荐
- Android 基于Android的手机邮件收发(JavaMail)之二( Welcome.java 和 ReceiveAndSend.java )
周末休息,这次我们继上次内容继续.上一篇内容我们讲述的是一些准备工作.下载两个javamail.jar和activation.jar文件,然后再BuildPath~ 言归正传,为了展示效果,在这里我申 ...
- spark读取hbase数据
def main(args: Array[String]): Unit = { val hConf = HBaseConfiguration.create(); hConf.set("hba ...
- cocos2dx 3.x(让精灵随着重力感应的方向移动而移动)
// // GameScene.hpp // HelloWord // // Created by apple on 2017/1/7. // // #ifndef GameScene_hpp #de ...
- [Android Tips] 21. Regex Named Groups in Android
Android SDK 并没有包含 Java 7 新增加的命名捕获组功能,需要使用第三方库 https://github.com/tony19/named-regexp import com.goog ...
- KEEPALIVED 双机自动切换部署备忘
1.配置文件的名字不要型错了.开始我将配置文件写成keeplive.conf,运行后也不报错,但无法看到VIP.日志里也看不到任何有价值信息.直到后来反复检查才发现可能配置文件名有问题,修正为keep ...
- 00Linux学习及角色定义
一.嵌入式Linux学习顺序 二.Linux架构 三.Linux工程师角色划分 四. 嵌入式应用工程师工作内容与所需知识点 从图 1可以知道, 嵌入式应用工程师主要从事与产品相关的嵌入式 Linux ...
- 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结
引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...
- Java throws子句是怎么写的呢?
如果一个方法可以导致一个异常但不处理它,它必须指定这种行为以使方法的调用者可以保护它们自己而不发生异常.做到这点你可以在方法声明中包含一个throws子句.一个 throws 子句列举了一个方法可能抛 ...
- 学习笔记:MySQL字符串类型
字符串类型 a) char和varchar 1.都需要指定字符的长度,char中的长度是字符的长度,而varchar的长度是字节的长度 2. char中指定的长度就是实际占用的长度,而 ...
- Andrion错误解决:cannot be resolved or is not a field
cannot be resolved or is not a field 解决这个问题: 选择project菜单中的clean,选择你的项目,先clean一下, 再去看看Activity中有没 ...