当前位置: 首页 > news >正文

结对开发——求环形二维数组最大子矩阵和的问题

一、题目要求

输入一个二维整形数组,数组里有正数也有负数。
二维数组首尾相接,象个一条首尾相接带子一样。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和

二、解题思路

      这次就在以前的基础上进行修改,先对二维数组进行了重构,形成一个环状二维数组,然后再用求二维数组子矩阵最大和的方法求得最终结果。

三、程序代码

 

  1 #include "stdafx.h"
  2 #include<iostream.h>
  3 int main(int argc, char* argv[])
  4 {
  5     int i,j;
  6     int a[3][5]={{1,-2,3},{1,-3,2},{4,-4,5}};
  7     int b[3][5];
  8     for(i=0;i<3;i++)
  9     {
 10      for(j=0;j<2;j++)
 11         a[i][j+3]=a[i][j];
 12     }
 13     int max=a[0][0];
 14     cout<<"初始二维数组为:"<<endl;
 15     for(i=0;i<3;i++)
 16     {
 17         for(j=0;j<3;j++)
 18         {
 19             cout<<a[i][j]<<' ';
 20         }
 21         cout<<endl;
 22     }
 23     cout<<"重构后环形数组为:"<<endl;
 24     for(i=0;i<3;i++)
 25     {
 26         for(j=0;j<5;j++)
 27         {
 28             cout<<a[i][j]<<' ';
 29         }
 30         cout<<endl;
 31     }
 32 
 33 
 34     for(i=0;i<1;i++)
 35     {
 36         b[0][0]=a[0][0];
 37         for(j=0;j<5;j++)
 38         {
 39             if(a[0][j-1]<0)
 40             {
 41                 b[0][j]=a[0][j];
 42             }
 43             else
 44             {
 45                 b[0][j]=b[0][j-1]+a[0][j];
 46             }        
 47         }
 48     }
 49     for(i=1;i<3;i++)
 50     {
 51         for(j=0;j<1;j++)
 52         {
 53             if(a[i-1][0]<0)
 54             {
 55                 b[i][0]=a[i][0];
 56             }
 57             else
 58             {
 59                 b[i][0]=b[i-1][0]+a[i][0];
 60             }
 61         }
 62     }
 63     for(i=1;i<3;i++)
 64     {
 65         for(j=1;j<5;j++)
 66         {
 67             if(b[i-1][j-1]<0)
 68             {
 69                 if(b[i-1][j]>=0&&b[i][j-1]>=0)
 70                 {
 71                     if(b[i][j-1]>=b[i-1][j])
 72                     {
 73                         b[i][j]=b[i][j-1]+a[i][j];
 74                     }
 75                     else
 76                     {
 77                         b[i][j]=b[i-1][j]+a[i][j];
 78                     }
 79                 }
 80                 else if(b[i-1][j]>=0&&b[i][j-1]<=0)
 81                 {
 82                     b[i][j]=b[i-1][j]+a[i][j];
 83                 }
 84                 else if(b[i-1][j]<=0&&b[i][j-1]>=0)
 85                 {
 86                     b[i][j]=b[i][j-1]+a[i][j];
 87                 }
 88                 else
 89                 {
 90                     b[i][j]=a[i][j];
 91                 }
 92             }
 93             else
 94             {
 95                 if(b[i-1][j]>=0&&b[i][j-1]>=0)
 96                 {
 97                     b[i][j]=a[i][j]+b[i-1][j]+b[i][j-1]-b[i-1][j-1];
 98                 }
 99                 else if(b[i-1][j]>=0&&b[i][j-1]<=0)
100                 {
101                     b[i][j]=a[i][j]+b[i-1][j]-b[i-1][j-1];
102                 }
103                 else if(b[i-1][j]<=0&&b[i][j-1]>=0)
104                 {
105                     b[i][j]=a[i][j]+b[i][j-1]-b[i-1][j-1];
106                 }
107                 else
108                 {
109                     b[i][j]=a[i][j];
110                 }
111             }
112         }
113     }
114     cout<<"子矩阵的和数组为:"<<endl;
115     for(i=0;i<3;i++)
116     {
117         for(j=0;j<5;j++)
118         {
119             cout<<b[i][j]<<" ";
120         }
121         cout<<endl;
122     }
123     cout<<endl;
124     for(i=0;i<3;i++)
125     {
126         for(j=0;j<5;j++)
127         {
128             if(b[i][j]>max)
129                 max=b[i][j];
130         }
131     }
132     cout<<"最大子矩阵和为:"<<max<<endl;
133     return 0;      
134 
135 }

四、结果截图

五、心得体会

       这次的合作我们俩个的角色互换了,陆宇为驾驶员,我做了领航员,这次的题目,是前面两个题目的组合,求二维数组最大子矩阵的和,求环形一维数组的最大子数组的和,环形一维时,我们采用了跨越首尾和不跨越首尾两种情况,发现这种方法不适用于二维,所以采用了重构数组的方法,转化成非环形,然后求二维最大子数组的和。开始在循环条件那儿遇到了问题,后来我们两个一起解决了,这次合作让我体会到了搭档的重要性,总之,这次结对开发很成功,以后继续努力。

转载于:https://www.cnblogs.com/maximumminimum/p/4385510.html

相关文章:

  • linux 2.6 互斥锁的实现-源码分析
  • 构建基于Nginx的web服务器
  • iOS之网络数据下载和Json数据解析
  • SQL Server技术内幕笔记合集
  • windbg vmware配置
  • [数分提高]2014-2015-2第5教学周第2次课讲义 3.2 微分中值定理
  • Clr静态数据Table-Valued函数
  • Python判断字符串编码以及编码的转换
  • 转:一个基于互联网医疗的创业公司,三年是一个收获
  • LoadRunner的Socket脚本关联小技巧
  • linux 驱动cc1101
  • (Repost) Getting Genode with TrustZone on the i.MX
  • [数分提高]2014-2015-2第5教学周第1次课
  • 【每天进步一点】毒药和老鼠的研究
  • linux下安装Python-2.7.9
  • 【RocksDB】TransactionDB源码分析
  • 【刷算法】求1+2+3+...+n
  • AWS实战 - 利用IAM对S3做访问控制
  • fetch 从初识到应用
  • IDEA常用插件整理
  • js
  • quasar-framework cnodejs社区
  • Vue 重置组件到初始状态
  • 开源地图数据可视化库——mapnik
  • 树莓派 - 使用须知
  • 学习ES6 变量的解构赋值
  • 译有关态射的一切
  • 由插件封装引出的一丢丢思考
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 自制字幕遮挡器
  • Semaphore
  • 数据库巡检项
  • 昨天1024程序员节,我故意写了个死循环~
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (12)Hive调优——count distinct去重优化
  • (差分)胡桃爱原石
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转载)深入super,看Python如何解决钻石继承难题
  • *Django中的Ajax 纯js的书写样式1
  • .htaccess配置重写url引擎
  • .jks文件(JAVA KeyStore)
  • .NET CLR Hosting 简介
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET MVC之AOP
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • [100天算法】-x 的平方根(day 61)