题目:返回一个二维数组中的最大字数数组的和
1.输入一个二维整形数组,数组里有正数也有负数。
2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。
3.求所有子数组的和的最大值。要求时间复杂度为O(n)。
2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。
3.求所有子数组的和的最大值。要求时间复杂度为O(n)。
结对编程要求:
两人结对完成编程任务。
一人主要负责程序分析,代码编程。
一人负责代码复审和代码测试计划。
发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)
代码:
#include <iostream>
using namespace std;
#define M 1000
int A[M][M];
int AS[M][M];
inline int ArraySum(int s, int t, int i, int j)//定义求数组部分和函数
{
return AS[i][j] - AS[i][t - 1] - AS[s - 1][j] + AS[s - 1][t - 1];
}
int max(int a, int b)
{
return(a>b ? a : b);
}
int main()
{
int m, n, i, j;
cout << "请输入数组的行:";
cin >> n;
cout << "请输入数组的列:";
cin >> m;
cout << "请输入一个数组:" << endl;
for (i = 0; i<n; i++)
{
for (j = 0; j<m; j++)
{
cin >> A[i][j];
}
}
// 计算数组的部分和
for (i = 0; i<n; i++)//以(0,0)为定点一直到(i,j)求部分和
{
for (j = 0; j<m; j++)
{
AS[i][j] = A[i][j] + AS[i - 1][j] + AS[i][j - 1] - AS[i - 1][j - 1];
}
}
int Max = A[0][0];
for (int a = 0; a<n; a++)
{
for (int c = a; c<n; c++)
{
// 将子数组上下边界设为第a行和第c行,在这些子数组中取最大值
int IV = ArraySum(a, 0, c, 0);
for (j = 1; j<m; j++)
{
IV = max(ArraySum(a, j, c, j), ArraySum(a, j, c, j) + IV);
Max = max(IV, Max);
}
}
}
cout << "数组最大子数组之和为:" << Max << endl;
}
using namespace std;
#define M 1000
int A[M][M];
int AS[M][M];
inline int ArraySum(int s, int t, int i, int j)//定义求数组部分和函数
{
return AS[i][j] - AS[i][t - 1] - AS[s - 1][j] + AS[s - 1][t - 1];
}
int max(int a, int b)
{
return(a>b ? a : b);
}
int main()
{
int m, n, i, j;
cout << "请输入数组的行:";
cin >> n;
cout << "请输入数组的列:";
cin >> m;
cout << "请输入一个数组:" << endl;
for (i = 0; i<n; i++)
{
for (j = 0; j<m; j++)
{
cin >> A[i][j];
}
}
// 计算数组的部分和
for (i = 0; i<n; i++)//以(0,0)为定点一直到(i,j)求部分和
{
for (j = 0; j<m; j++)
{
AS[i][j] = A[i][j] + AS[i - 1][j] + AS[i][j - 1] - AS[i - 1][j - 1];
}
}
int Max = A[0][0];
for (int a = 0; a<n; a++)
{
for (int c = a; c<n; c++)
{
// 将子数组上下边界设为第a行和第c行,在这些子数组中取最大值
int IV = ArraySum(a, 0, c, 0);
for (j = 1; j<m; j++)
{
IV = max(ArraySum(a, j, c, j), ArraySum(a, j, c, j) + IV);
Max = max(IV, Max);
}
}
}
cout << "数组最大子数组之和为:" << Max << endl;
}
实现效果:
![](https://i-blog.csdnimg.cn/blog_migrate/5ca4bcc8171fcfbd1bf909ce05ebbce3.png)
组员:张佳玮
![](https://i-blog.csdnimg.cn/blog_migrate/16962decad1ad6f4e9aabd408caf168e.jpeg)