题目:返回一个二维整数数组中最大子数组的和(二)
要求:
1、输入一个整形数组,数组里有正数也有负数。
2、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值,要求时间复杂度为O(n)。
3、程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是:
数组的行数,
数组的列数,
每一行的元素, (用逗号分开)
每一个数字都是有符号32位整数。
解法思路:
1、首先,采用FILE结构从txt文件中读取二维数组的行数row和列数column,然后利用指针动态创建结构体二维数组arrayStructure[][] 。
2、然后利用for循环从txt文件中依次读取数组的元素到结构体数组中(结构体中包含数组元素element和元素序号sequence)。
3、遍历数组,对数组元素进行子数组分组并把每个元素的分组序号存储到结构体数组中的元素序号sequence中。
4、分组求和,遍历数组按照元素的分组序号利用for循环对各子数组进行求和,并对和进行比较。
算法:
//遍历数组分组求和
for (i = 0; i < row; i++)
{
for (j = 0; j < column; j++)
{
for (k = 0; k < m; k++)//k是分组序号,m是分组数量
{
if (arrayStructure[i][j].sequence == k)
{
sum[k] += arrayStructure[i][j];
continue;
}
}
}
}
//比较最大子数组的和
for (k = 0; k < m; k++)
{
if (max < sum[k])
{
max = sum[k];
}
}
总结
对数组元素进行分组标记的算法暂时还未解出。
结对开发者姓名:安帅,刘丛欢