题目
求一个矩阵中元素和最大的二维矩阵,如:
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
和最大的二维矩阵为:
4 5
5 3
要求:写出算法,分析时间复杂度
解法
1. 暴力方法:最容易想到的解法就是使用一个2x2的窗口进行逐行遍历,然后计算每个窗口中元素的和sum=array[i][j]+array[i+1][j]+array[i][j+1]+array[i+1][j+1],然后和最大的一个窗口就是要求的二维矩阵。
2. 一种改进的思想是将暴力方法中的重复计算的部分进行单独的记录,在计算下面行的时候可以直接使用上面记录的结果,但好像时间复杂度并没有明显改善。链接:https://blog.csdn.net/zhanxinhang/article/details/6731134
暴力方法
FIND-MAX-2X2-MATRIX(int[][] array, int row, int column):
int sum_max = 0;
int resulti = 0, resultj = 0; // 记录和最大矩阵的位置
for i = 0 to row - 1:
for j = 0 to column - 1:
int sum = array[i][j] + array[i+1][j] + array[i][j+1] + array[i+1][j+1];
if sum_max < sum:
sum_max = sum;
resulti = i;
resultj = j
return array[resulti to resulti+1, resultj to resultj+1]