Current streak:
0 days
Longest streak:
2 days
Less
More
int maxSumMatrix(int n, int m, vector<vector<int>> &mat, int val) {
// Write your code here.
// Step 1: Create and populate PrefixSum matrix
vector<vector<int>> prefixSum(n, vector<int>(m, 0));
for (int i = 0; i < n; i++) {
vector<int> curr(m, 0);
for (int j = 0; j < m; j++) {
curr[j] = (j > 0 ? curr[j - 1] : 0) + mat[i][j];
prefixSum[i][j] = curr[j] + (i > 0 ? prefixSum[i - 1][j] : 0);
}
}
// Step 2: Binary search for max k
int answer = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int left = 1;
int right = min(i, j) + 1;
while (left <= right) {
int mid = (left + right) / 2;
int sum = prefixSum[i][j];
if (i - mid >= 0) sum -= prefixSum[i - mid][j];
if (j - mid >= 0) sum -= prefixSum[i][j - mid];
if (i - mid >= 0 && j - mid >= 0) sum += prefixSum[i - mid][j - mid];
if (sum <= val) {
answer = max(answer, mid);
left = mid + 1;
} else {
right = mid - 1;
}
}
}
}
return answer;
}
bool identicalTrees(BinaryTreeNode<int>* r1, BinaryTreeNode<int>* r2) {
// Write your code here.
if(r1==NULL||r2==NULL) return r1==r2;
return r1->data==r2->data && identicalTrees(r1->left,r2->left) &&identicalTrees(r1->right,r2->right);
}