zoukankan      html  css  js  c++  java
  • 二维数组中最大子数组的和

    题目:返回一个二维整数数组中最大子数组的和。
    要求:
    输入一个二维整形数组,数组里有正数也有负数。
    二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。
    求所有子数组的和的最大值。要求时间复杂度为O(n)。 
    思路:
    借鉴网上代码整理得思路;
    根据一位数组最大子数组求和的编程思路,讲二维数组转化成一维数组求解;
    即求出每一行的最大子数组之和,通过比较各行最大子数组之和的大小,求出只有二维数组只有一行的情况下的最大子数组之和;
    然后求每两行最大子数组之和,即将每两行的相同列相加,将二维数组压缩成一维数组,然后步骤同上;
    以此类推,最后求出二维数组中最大子数组之和。
     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<ctime>
     4 using namespace std;
     5 #define M 4
     6 #define N 4
     7 #include <memory.h>  
     8 
     9 int maxSubArray(int *arr, int len)       //最大子序列和  
    10 {
    11     int i, sum = arr[0], b = 0;
    12     for (i = 0; i<len; ++i)
    13     {
    14         if (b>0)
    15             b += arr[i];
    16         else
    17             b = arr[i];
    18         if (b>sum)
    19             sum = b;
    20     }
    21     return sum;
    22 }
    23 int maxSubMatrix(int n, int m, int array[M][N])
    24 {
    25     int i, j, h, max, sum = -100000;
    26     int b[100];
    27     for (i = 0; i<n; i++)
    28     {
    29         memset(b, 0, sizeof(b));       //初始化b[]  
    30         for (j = i; j<n; j++)          //把第i行到第j行相加,对每一次相加求出最大值  
    31         {
    32             for (h = 0; h<m; h++)
    33             {
    34                 b[h] += array[j][h];   //二维数组压缩成一维数组,然后求最大子序列和  
    35             }
    36             max = maxSubArray(b, h);
    37 
    38             if (max>sum)
    39                 sum = max;
    40         }
    41     }
    42     return sum;
    43 }
    44 int main()
    45 {
    46     int arr[M][N];
    47     cout << "随机二维数组为:" << endl;
    48     srand(time(0));
    49     for (int i = 0; i < M; i++)
    50     {
    51         for (int j = 0; j < N; j++)
    52         {
    53             arr[i][j] = rand() % 50-25;
    54             cout << arr[i][j] << " ";
    55         }
    56         cout << endl;
    57     }
    58     cout << maxSubMatrix(M, N, arr) << endl;
    59     return 0;
    60 }

    因为原代码是引用Txt文件中的数组,为产生随机数做出改动,在引用参数时出现int类型的实参与int 类型的形参不兼容的错误,通过网上查找资料改正。

    总结:通过看网络上前辈们的代码,将他们代码的思路和自己的思路进行比较,找出自己的不足,并通过实际敲代码来体会这种差别,受益良多。

  • 相关阅读:
    jquery-ui.min.js:5 Uncaught TypeError: b.nodeName.toLowerCase is not a function
    HTTP::Request
    LWP::UserAgent
    perl json模块
    perl 处理perl返回的json
    perl中 wx返回的json需要encode_utf8($d);
    perl malformed JSON string, neither tag, array, object, number, string or atom, at character offset
    encode_json 会对给定的Perl的数据结构转换为一个UTF-8 encoded, binary string.
    为什么出现Wide character in print at a14.pl line 41
    perl encode_json 会产生 UTF-8 (binary) string decode_json 需要一个 UTF-8 (binary) string
  • 原文地址:https://www.cnblogs.com/SanShaoS/p/4412525.html
Copyright © 2011-2022 走看看