返回一个二维整数数组中最大子数组的和

Posted gxcblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回一个二维整数数组中最大子数组的和相关的知识,希望对你有一定的参考价值。

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

 要求:

输入一个二维整形数组,数组里有正数也有负数。

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

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

 结对编程要求:

 两人结对完成编程任务。

 一人主要负责程序分析,代码编程。

 一人负责代码复审和代码测试计划。

代码:

#include<stdio.h>
#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 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++)
    {
        for ( j = 0; j < 100; j++)
        {
                    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);
             if (max1>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;
}
运行结果截图:
技术分享图片
体会:
结对开发最重要的是两个人之间的默契程度,编码思想不会产生大的分歧,这需要日积月累的编程配合才能实现!
































































以上是关于返回一个二维整数数组中最大子数组的和的主要内容,如果未能解决你的问题,请参考以下文章

返回一个二维整数数组中最大子数组的和(二人结对)

返回一个二维整数数组中最大子数组的和

返回一个二维整数数组最大子数组的和

返回一个二维整数数组中最大子数组的和

返回一个整数数组中最大子数组的和。(续2)---二维数组

返回一个二维整数数组中最大子数组的和