2D range sum and DP and via multi-source 0–1 BFS.

Jimmy (xiaoke) Shen
1 min readJun 19, 2021

--

Today I solved an interesting problem. We can use both 2D range sum and DP to solve this problem.

Social Distancing 2

The critical part is converting the problem into find the largest square contains all 0s.

The problem can be solve by using 2D range sum, DP or

2D range sum

int solve(vector<vector<int>>& matrix) {
const int n = matrix.size();
if (n<=1) return 0;
const int m = matrix[0].size();
for (int j = 1; j < m; ++j)matrix[0][j] += matrix[0][j-1];
for (int i = 1; i < n; ++i)matrix[i][0] += matrix[i-1][0];
for (int i = 1; i < n; ++i)
for (int j = 1; j < m; ++j)
matrix[i][j] += (matrix[i-1][j] + matrix[i][j-1] - matrix[i-1][j-1]);
int ret = 0;
if (matrix[n-1][m-1] == n*m)return 0;
int len = 1;
for (int i = 1; i < n; ++i)
for (int j = 1; j < m; ++j){
for (int k = len; i + k - 1 < n && j + k - 1 < m; ++k){
int R = i + k -1, C = j + k - 1;
int sum =matrix[R][C] - matrix[i-1][C] - matrix[R][j-1] + matrix[i - 1][j - 1];
if (sum == 0)len = k;
else break;
}
}
return (len + 1 ) / 2;
}

For the DP and multi-source 0–1 BFS, I will not put the solution here. Please see the discussion session.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response