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


    #include<iostream>    
    #include<ctime>
    using namespace std;
    #define M 4
    #define N 4
    
    int maxline(int *array, int len)       //求一维数组最大子序列和  
    {
        int i, sum = array[0], b = 0,j = 0;
        for (i = 0; i<len; ++i)
        {
            if (b>0)
                b += array[i];
            else
                b = array[i];
            if (b>sum)
                sum = b;            
        }
        return sum;
    }
    int maxtwodimension(int n, int m, int array[M][N])
    {
        int i, j, h,g, max, sum = -1000;
        int b[100];
        for(g = 0;g < m;g++){
            for (i = 0; i<n; i++)
            {
                memset(b, 0, sizeof(b));       //将b[100]中的数字全部初始化为0  
                for (j = i; j<n; j++)          //把第i行到第n行相加,对每一次相加求出最大值  
                {
                    for (h = g; h<m; h++)
                    {
                        b[h] += array[j][h];   //求一行的和,二维数组压缩成一维数组  
                    }
                    max = maxline(b, h);   //按照一维数组求最大子数组的方法,求最大子序列和
    
                    if (max>sum)
                        sum = max;
                }
            }
        }
    
        return sum;
    }
    int main()
    {
        int arr[M][N];
        cout << "随机二维数组为:" << endl;
        srand((unsigned)time(0));
        for (int i = 0; i < M; i++)
        {
            for (int j = 0; j < N; j++)
            {
                arr[i][j] = rand() % 100-25;
                cout << arr[i][j] << " ";
            }
            cout << endl;
        }
        cout <<"最大子矩阵和为:  "<< maxtwodimension(M, N, arr) << endl;
        return 0;
    }

    设计思路:我还是根据一维数组的求解过程,把二维数组先求出每一行的和储存到一维数组中,根据一维数组的求解过程求出二维数组最大的数组,然后逐步缩小二维数组的行数和列数继续按照一维数组求最大子数组的方法求解。但是使用了o(n4)暂时还是想不出来o(n)的计算方法

  • 相关阅读:
    华南虎原图找到了
    电脑高手的7大标准
    科幻小说一代宗师阿瑟•克拉克过逝
    看英文片最容易误解的10个单词(感觉对大家很有用,转过来的)
    地震了,人跑的真快啊
    John Titor一个来自未来的人
    马云扮白雪公主
    世界上最冷的脑筋急转弯
    告别人肉刷,让房源自己送上门
    来测下你的浏览器对标准的支持情况吧
  • 原文地址:https://www.cnblogs.com/laozhanghahaha/p/4421897.html
Copyright © 2020-2023  润新知