返回一个二维整数数组中最大子数组的和
Posted gxcblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回一个二维整数数组中最大子数组的和相关的知识,希望对你有一定的参考价值。
题目:返回一个二维整数数组中最大子数组的和。
要求:
输入一个二维整形数组,数组里有正数也有负数。
二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
结对编程要求:
两人结对完成编程任务。
一人主要负责程序分析,代码编程。
一人负责代码复审和代码测试计划。
代码:
#include<stdio.h>
#define INF 1000
#define N 4
#define M 4
#define INF 1000
#define N 4
#define M 4
int maxsubsum(int * arr, int Size)
{
int maxSum = -INF;
int sum = 0;
int i;
for( i = 0; i < Size; i++)
{
if(sum < 0)
{
sum = arr[i];
}
else
{
sum += arr[i];
}
if(sum > maxSum)
{
maxSum = sum;
}
}
return maxSum;
}
{
int maxSum = -INF;
int sum = 0;
int i;
for( i = 0; i < Size; i++)
{
if(sum < 0)
{
sum = arr[i];
}
else
{
sum += arr[i];
}
if(sum > maxSum)
{
maxSum = sum;
}
}
return maxSum;
}
int maxSubMatrix(int n, int m, int array1[M][N])
{
int i, j, h, max1, sum = -INF;
int b[100];
for (i = 0; i<n; i++)
{
{
int i, j, h, max1, sum = -INF;
int b[100];
for (i = 0; i<n; i++)
{
for ( j = 0; j < 100; j++)
{
b[j] = 0;
}
{
b[j] = 0;
}
for (j = i; j<n; j++) //把第i行到第j行相加,对每一次相加求出最大值
{
for (h = 0; h<m; h++)
{
b[h] += array1[j][h]; //二维数组压缩成一维数组,然后求最大子序列和
}
max1 = maxsubsum(b, h);
{
for (h = 0; h<m; h++)
{
b[h] += array1[j][h]; //二维数组压缩成一维数组,然后求最大子序列和
}
max1 = maxsubsum(b, h);
if (max1>sum)
sum = max1;
}
}
return sum;
}
sum = max1;
}
}
return sum;
}
int main()
{
int maxsum=0 ;
int i,j;
int maxsubsum(int * arr, int Size);
int maxSubMatrix(int n, int m, int array1[M][N]);
int arr[M][N]={1,2,3,4,5,6,7,8,-50,-10,11,12,13,14,15,16};
for ( i = 0; i < M; i++)
{
for ( j = 0; j < N; j++)
{
printf("%d ",arr[i][j]);
}
printf(" ");
}
printf("最大子数组和是: ");
maxsum=maxSubMatrix(M, N, arr);
printf("%d ",maxsum);
return 0;
}
运行结果截图:
体会:
结对开发最重要的是两个人之间的默契程度,编码思想不会产生大的分歧,这需要日积月累的编程配合才能实现!
以上是关于返回一个二维整数数组中最大子数组的和的主要内容,如果未能解决你的问题,请参考以下文章