3.1课堂练习
Posted renhao46707633
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.1课堂练习相关的知识,希望对你有一定的参考价值。
题目:返回一个二维整数数组中最大子数组的和。
要求:
输入一个二维整型数组, 数组中有正数也有负数。
二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为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课堂练习的主要内容,如果未能解决你的问题,请参考以下文章