子数组之和的最大值(二维)

来源:互联网 发布:腾讯购物软件 编辑:程序博客网 时间:2024/05/20 01:34

《编程之美》第2.15节:子数组之和的最大值(二维)

题目:求二维数组中子数组的最大和

解法:从上到下遍历,对于第i行,遍历从第i行往下的所有行,使其加和成为一维数组,然后用一维数组求最大值来做。

代码:

#include<iostream>#include<algorithm>using namespace std;int sub2DarrySum(int A[][5],int N,int M)//返回要排除的值{//int (*arr)[4] 声明了一个指针变量,这个指针指向由4个int组成的数组int result=INT_MIN;int tempResult=0;for(int i=0;i<N;i++){int temp[5]={};for(int j=i;j<N;j++){for(int k=0;k<M;k++)temp[k]+=A[j][k];tempResult=0;for(int k=0;k<M;k++){tempResult+=temp[k];if(result<tempResult)result=tempResult;if(tempResult<0)tempResult=0;}}}return result;}int main(){int A[4][5]={{1,2,-1,-4,-20},{-8,-3,4,2,1},{3,8,10,1,3},{-4,-1,1,7,-6}};int result=sub2DarrySum(A,4,5);cout<<result<<endl;system("pause");return 0;}
输出结果:29

从第一行第一列到第三行第三列中的数字。即:

-3,4,2

8,10,1

-1,1,7


0 0
原创粉丝点击