《编程之美》第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

被折叠的 条评论
为什么被折叠?



