在一個大小在 (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 。
提示:
/**
* @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;
};
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!