求一个矩阵中最大的二维矩阵(元素和最大).如:
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
中最大的二维矩阵是:
4 5
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
中最大的二维矩阵是:
4 5
5 3
分析:
本题要求的是元素和最大的二维子矩阵,因为指定了所求矩阵的维数,所以简化了问题。思路是简单的,即按行遍历,每次计算当前行及下一行的四个元素的和,然后与当前记录的子矩阵的和做比较,如果大于当前值,则用其替代原先保存的值,并记录当前子矩阵的左上角元素位置。这样下来,时间复杂度为O(m*n)。
参考代码:
1: int GetMaxMatrix(int** matrix, int& row, int& col)
2: {
3: int rowNum,colNum;
4:
5: int sum=-(1<<31), temp = 0;
6:
7: for (int i = 0; i < row - 1; i++)
8: {
9: for (int j = 0; j < col - 1; j++)
10: {
11: temp += (matrix[i][j] + matrix[i][j+1]);
12: temp += (matrix[i+1][j] + matrix[i+1][j+1]);
13:
14: if (temp > sum)
15: {
16: sum = temp;
17: rowNum = i;
18: colNum = j;
19: }
20: temp = 0;
21: }
22: }
23: row=rowNum;
24: col=colNum;
25:
26: return sum;
27: }
28: