在一个大小在 (0, 0) 到 (N-1, N-1) 的2D网格 grid 中,除了在 mines 中给出的单元为 0,其他每个单元都是 1。网格中包含 1 的最大的轴对齐加号标志是多少阶?返回加号标志的阶数。如果未找到加号标志,则返回 0。

一个 k" 阶由 1 组成的“轴对称”加号标志具有中心网格 grid[x][y] = 1 ,以及4个从中心向上、向下、向左、向右延伸,长度为 k-1,由 1 组成的臂。下面给出 k" 阶“轴对称”加号标志的示例。注意,只有加号标志的所有网格要求为 1,别的网格可能为 0 也可能为 1。

k 阶轴对称加号标志示例:

阶 1: 000 010 000 阶 2: 00000 00100 01110 00100 00000 阶 3: 0000000 0001000 0001000 0111110 0001000 0001000 0000000

示例 1:

输入: N = 5, mines = [[4, 2]] 输出: 2 解释: 11111 11111 11111 11111 11011 在上面的网格中,最大加号标志的阶只能是2。一个标志已在图中标出。

示例 2:

输入: N = 2, mines = [] 输出: 1 解释: 11 11 没有 2 阶加号标志,有 1 阶加号标志。

示例 3:

输入: N = 1, mines = [[0, 0]] 输出: 0 解释: 0 没有加号标志,返回 0 。

提示:

  1. 整数N 的范围: [1, 500].
  2. mines 的最大长度为 5000.
  3. mines[i] 是长度为2的由2个 [0, N-1] 中的数组成.
  4. (另外,使用 C, C , 或者 C# 编程将以稍小的时间限制进行​​判断.)

leetcode227怎么样(leetcode系列第八期最大加号标志)(1)

/**

* @param {number} N

* @param {number[][]} mines

* @return {number}

*/

var orderOfLargestPlusSign = function(N, mines) {

var g = [], c = [];

for(var i = 0; i < N; i ){

g[i] = [];

c[i] = [];

for(var j = 0; j < N; j ){

g[i][j] = 1;

c[i][j] = {};

}

}

for(var i in mines){

g[mines[i][0]][mines[i][1]] = 0;

}

// 每个点分为 上下左右

// 统计左

for(var i = 0; i < N; i ){

for(var j = 0; j < N; j ){

if(g[i][j] === 1){

c[i][j]["left"] = j===0 ? 1 : c[i][j - 1]["left"] 1;

}else{

c[i][j]["left"] = 0;

}

}

}

// 统计右

for(var i = 0; i < N; i ){

for(var j = N - 1; j >= 0; j--){

if(g[i][j] === 1){

c[i][j]["right"] = j===N-1 ? 1 : c[i][j 1]["right"] 1;

}else{

c[i][j]["right"] = 0;

}

}

}

// 统计上

for(var i = 0; i < N; i ){

for(var j = 0; j < N; j ){

if(g[j][i] === 1){

c[j][i]["up"] = j===0 ? 1 : c[j - 1][i]["up"] 1;

}else{

c[j][i]["up"] = 0;

}

}

}

// 统计下

for(var i = 0; i < N; i ){

for(var j = N - 1; j >= 0; j--){

if(g[j][i] === 1){

c[j][i]["down"] = j===N-1 ? 1 : c[j 1][i]["down"] 1;

}else{

c[j][i]["down"] = 0;

}

}

}

var result = 0;

for(var i = 0; i < N; i ){

for(var j = 0; j < N; j ){

result = Math.max(Math.min(c[i][j]["left"], c[i][j]["right"], c[i][j]["up"], c[i][j]["down"]), result);

}

}

return result;

};

,