码迷,mamicode.com
首页 > 其他好文 > 详细

3.1课堂练习

时间:2018-10-28 20:50:29      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:最大值   result   inf   nbsp   好的   stream   void   max   开始   

题目:返回一个二维整数数组中最大子数组的和。

要求:

输入一个二维整型数组, 数组中有正数也有负数。

二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为o(n).

思维过程:二维数组求最大数组是从一维数组扩展而来,首先确定最大上下界的情况在第一行开始确定最大子数组范围,对于规定好的最大子数组的范围,把最大子数组按照一列有几个数,分成几种不同的行,对于以上产生的几个数组,进行一堆求子数组之和最大值的方法。

 1 #include<iostream>
 2 using namespace std;
 3 void main ()
 4 {
 5     int a,b,i,j,m=0,A[100][100];
 6  
 7     cout<<"输入矩阵的行和列";
 8     cin>>a>>b;
 9     if(a>100||b>100)
10     {
11         cout<<"请重新输入:";
12         cin>>a>>b;
13     }
14     for(i=0;i<a;i++)
15     {
16         for(j=0;j<b;j++)
17         {
18             cin>>A[i][j];
19         }
20  
21     }
22     int sum[100]={0},max=0,result=A[0][0];
23  
24     for(i=0;i<a;i++)
25     {
26         while(m+i<a)
27         {
28             for(j=0;j<b;j++)
29             {
30                 sum[j]=sum[j]+A[m+i][j];
31  
32             }
33             max=0;
34             for(j=0;j<b;j++)
35             {
36                 if(max+sum[j]>sum[j])
37                 {
38                     max=max+sum[j];
39                 }
40                 else
41                 {
42                     max=sum[j];
43                 }
44                 if(max>result)
45                 {
46                     result=max;
47                 }
48             }
49             m++;
50         }
51         m=0;
52         for(j=0;j<b;j++)
53         {
54             sum[j]=0;
55         }
56  
57     }
58  
59     cout<<result;
60 }

技术分享图片感悟

:每次的输入代码都是一次学习的过程,只有做了才会发现问题。

 

3.1课堂练习

标签:最大值   result   inf   nbsp   好的   stream   void   max   开始   

原文地址:https://www.cnblogs.com/renhao46707633/p/9866693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!