764. Largest Plus Sign

网友投稿 226 2022-12-01

764. Largest Plus Sign

In a 2D grid from (0, 0) to (N-1, N-1), every cell contains a 1, except those cells in the given list mines which are 0. What is the largest axis-aligned plus sign of 1s contained in the grid? Return the order of the plus sign. If there is none, return 0.

An “axis-aligned plus sign of 1s of order k” has some center grid[x][y] = 1 along with 4 arms of length k-1 going up, down, left, and right, and made of 1s. This is demonstrated in the diagrams below. Note that there could be 0s or 1s beyond the arms of the plus sign, only the relevant area of the plus sign is checked for 1s.

Examples of Axis-Aligned Plus Signs of Order k:

Order 1:000010000Order 2:0000000100011100010000000Order 3:0000000000100000010000111110000100000010000000000

Example 1:

Input: N = 5, mines = [[4, 2]]Output: 2Explanation:1111111111111111111111011In the above grid, the largest plus sign can only be order 2. One of them is marked in

Example 2:

Input: N = 2, mines = []Output: 1Explanation:There is no plus sign of order 2, but there is of order 1.

Example 3:

Input: N = 1, mines = [[0, 0]]Output: 0Explanation:There is no plus sign, so return 0.

Note:

N will be an integer in the range [1, 500]. mines will have length at most 5000. mines[i] will be length 2 and consist of integers in the range [0, N-1]. (Additionally, programs submitted in C, C++, or C# will be judged with a slightly smaller time limit.)

class Solution public int orderOfLargestPlusSign(int N, int[][] mines) { Set banned = new HashSet(); int[][] dp = new int[N][N]; for (int[] mine: mines) banned.add(mine[0] * N + mine[1]); int ans = 0, count; for (int r = 0; r < N; ++r) { count = 0; for (int c = 0; c < N; ++c) { count = banned.contains(r*N + c) ? 0 : count + 1; dp[r][c] = count; } count = 0; for (int c = N-1; c >= 0; --c) { count = banned.contains(r*N + c) ? 0 : count + 1; dp[r][c] = Math.min(dp[r][c], count); } } for (int c = 0; c < N; ++c) { count = 0; for (int r = 0; r < N; ++r) { count = banned.contains(r*N + c) ? 0 : count + 1; dp[r][c] = Math.min(dp[r][c], count); } count = 0; for (int r = N-1; r >= 0; --r) { count = banned.contains(r*N + c) ? 0 : count + 1; dp[r][c] = Math.min(dp[r][c], count); ans = Math.max(ans, dp[r][c]); } } return

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:聊聊springboot2.2.3升级到2.4.0单元测试的区别
下一篇:335. Self Crossing
相关文章

 发表评论

暂时没有评论,来抢沙发吧~