Skip to content

Commit df4442f

Browse files
authored
Update MaximumSumSubMatrixInAGivenMatrix.java
1 parent 4328037 commit df4442f

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

DynamicProgramming/MaximumSumSubMatrixInAGivenMatrix.java

+77
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,82 @@
77
88
*/
99

10+
class Point{
11+
int x;
12+
int y;
13+
14+
Point(int i, int j){
15+
x = i;
16+
y = j;
17+
}
18+
19+
}
20+
21+
class SubMatrix{
22+
int sum[][];
23+
24+
public void fillSumMatrix(int A[][]){
25+
int n = A.length;
26+
int m = A[0].length;
27+
28+
sum = new int[n][m];
29+
30+
sum[0][0] = A[0][0];
31+
32+
//pre-process first row
33+
for(int j=1 ; j < m ; j++){
34+
sum[0][j] = sum[0][j-1] + A[0][j];
35+
}
36+
37+
//pre-process first col
38+
for(int i=1 ; i < n ; i++){
39+
sum[i][0] = sum[i-1][0] + A[i][0];
40+
}
41+
42+
//compute rest of the sum-matrix
43+
for(int i=1 ; i < n ; i++){
44+
for(int j=1 ; j < m ; j++){
45+
sum[i][j] = A[i][j] + sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1];
46+
}
47+
}
48+
}
49+
50+
public Point maxSumSubmatrix(int k){ //returns the bottom right corner of the maximum sum submatrix
51+
//dimensions of the required submatrix --> (k*k)
52+
53+
//dimensions of main matrix
54+
int n = sum.length;
55+
int m = sum[0].length;
56+
57+
int currSum = 0;
58+
int maxSum = 0;
59+
Point p = null;
60+
61+
for(int i=k-1 ; i < n ; i++){
62+
for(int j=k-1 ; j < m ; j++){
63+
64+
currSum = sum[i][j];
65+
66+
if(i-k >= 0){
67+
result -= sum[i-k][j];
68+
}
69+
if(j-k >= 0){
70+
result -= sum[i][j-k];
71+
}
72+
if(i-k >= 0 && j-k >= 0){
73+
result += sum[i-k][j-k];
74+
}
75+
76+
if(maxSum < currSum){
77+
maxSum = currSum;
78+
p = new Point(i,j);
79+
}
80+
}
81+
}
82+
return p;
83+
84+
}
85+
86+
}
1087

1188

0 commit comments

Comments
 (0)