题目如下:

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:
000
010
000 Order 2:
00000
00100
01110
00100
00000 Order 3:
0000000
0001000
0001000
0111110
0001000
0001000
0000000
Example 1: Input: N = 5, mines = [[4, 2]]
Output: 2
Explanation:
11111
11111
11111
11111
11011
In the above grid, the largest plus sign can only be order 2. One of them is marked in bold.
Example 2: Input: N = 2, mines = []
Output: 1
Explanation:
There is no plus sign of order 2, but there is of order 1.
Example 3: Input: N = 1, mines = [[0, 0]]
Output: 0
Explanation:
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.)

解题思路如下:

首先把二维数组构造出来,然后把mines所在的位置标记为0,非mines标记为1,这是基本。接下来遍历所有的非mines,计算其上下左右四个方向最多相邻值为1的个数,然后取四个值的最小值,即为该位置的Plus Sign,最后求出所有Plus Sign的最大值即可。这里有一点可以优化的地方,就是计算位置Plus Sign的时候,可以每次计算出一个方向后与之前已经计算出的位置的Largest值比较,如果小于Largest,其他方向就可以不用计算了,直接continue到下一个位置。

完整代码如下:

/**
* @param {number} N
* @param {number[][]} mines
* @return {number}
*/
largest = 0
var calcUp = function(M,N,x,y){
var count = 0
var c = x
while(--c >= 0){
if(M[c][y] == 1){
count++
}
else{
break
}
}
return count
} var calcDown = function(M,N,x,y){
var count = 0
var c = x
while(++c < N ){
if(M[c][y] == 1){
count++
}
else{
break
}
}
return count
} var calcLeft = function(M,N,x,y){
var count = 0
var c = y
while(--c >=0){
if(M[x][c] == 1){
count++
}
else{
break
}
}
return count
} var calcRight = function(M,N,x,y){
var count = 0
var c = y
while(++c < N){
if(M[x][c] == 1){
count++
}
else{
break
}
}
return count
} var calcLargest = function(M,N,x,y) {
var up = calcUp(M,N,x,y)
if (up < largest){
return -1
}
var down = calcDown(M,N,x,y)
if (down < largest ){
return -1
}
var left = calcLeft(M,N,x,y)
if (left < largest){
return -1
}
var right = calcRight(M,N,x,y)
if (right < largest){
return -1
}
return Math.min(up,down,left,right)
}
var orderOfLargestPlusSign = function(N, mines) {
largest = 0
var mar = []
for(var i = 0;i<N;i++){
var row = []
for(var j = 0;j<N;j++){
row.push(1)
}
mar.push(row)
}
for(var i=0;i<mines.length;i++){
mar[mines[i][0]][mines[i][1]] = 0
}
for(var i = 0;i<N;i++){
for(var j = 0;j<N;j++){
if(mar[i][j] == 0){
continue
}
else{
var r = calcLargest(mar,N,i,j)
//console.log(i,j,r)
if (r == -1){
continue
}
var l = 1 + r
if (largest < l){
largest = l
}
}
}
}
//console.log(mar)
return largest
};

【leetcode】Largest Plus Sign的更多相关文章

  1. 【LeetCode】Largest Number 解题报告

    [LeetCode]Largest Number 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/largest-number/# ...

  2. 【leetcode】Largest Number

    题目简述: Given a list of non negative integers, arrange them such that they form the largest number. Fo ...

  3. 【leetcode】Largest Number ★

    Given a list of non negative integers, arrange them such that they form the largest number. For exam ...

  4. 【Leetcode】Largest Rectangle in Histogram

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  5. 【LeetCode】动态规划(下篇共39题)

    [600] Non-negative Integers without Consecutive Ones [629] K Inverse Pairs Array [638] Shopping Offe ...

  6. 【LeetCode】764. Largest Plus Sign 解题报告(Python)

    [LeetCode]764. Largest Plus Sign 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn ...

  7. 【LeetCode】813. Largest Sum of Averages 解题报告(Python)

    [LeetCode]813. Largest Sum of Averages 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...

  8. 53. Maximum Subarray【leetcode】

    53. Maximum Subarray[leetcode] Find the contiguous subarray within an array (containing at least one ...

  9. 【LeetCode】排序 sort(共20题)

    链接:https://leetcode.com/tag/sort/ [56]Merge Intervals (2019年1月26日,谷歌tag复习) 合并区间 Input: [[1,3],[2,6], ...

随机推荐

  1. JS中document对象 && window对象

    所有的全局函数和对象都属于Window对象的属性和方法. 区别: 1.window 指窗体.Window 对象表示浏览器中打开的窗口. document指页面.document是window的一个子对 ...

  2. cocos2dx[3.2](7) 核心类Director/Scene/Layer/Sprite

    [核心类] 导演Director.场景Scene.布景层Layer.精灵Sprite的概念请移步: cocos2dx基础篇(2) 第一个程序 导演控制场景,场景控制图层,图层控制精灵,精灵控制动作. ...

  3. 11.8 Springcloud项目简介

    各位领导好,我从毕业后做了两年Java开发工程师,刚开始都是一些SSM框架的项目,但是由于技术不断更新,微服项目成为必然的趋势,大约在做了1年的SSM框架,之后开始接触微服项目,前后经理过Dubbo和 ...

  4. 【Qt开发】QTableWidget的详细设置

    在使用Qt不多的日子里,已经两次用到了QTableWidget这个控件,也慢慢的习惯和喜欢上了它.再使用QTableWidget的时候,已不像刚开始使用时的迷茫.嗯嗯.现在就来总结总结我与QTable ...

  5. 四、Kubernetes_V1.10集群部署-master-创建kubeconfig

    1.生成配置文件 # 创建 TLS Bootstrapping Token # export BOOTSTRAP_TOKEN=$( /dev/urandom | od -An -t x | tr -d ...

  6. show slave status参数详解

    root@localhost (none)>show slave status\G *************************** 1. row ******************** ...

  7. [转帖]SUN/Oracle JDK还是OpenJDK?

    你安装的是 https://www.cnblogs.com/shoufeng/p/9719995.html 目录 1 如何查看你安装的JDK版本 1.1 要用到的命令行工具 1.2 查看JDK的版本 ...

  8. 第一课 初识Linux(一)

    Linux起源 创始人:李纳斯.托瓦兹 Linux简介: Linux是一套免费使用和自由传播的类UNIX操作系统:是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.Lin ...

  9. PythonDay15

    第十五章装饰器_递归 今日内容 带参数装饰器 多个装饰器修饰一个函数 递归 带参数的装饰器 # 判断argv,当登录不同的网页,会有不同的装饰效果def auth(argv):   def warpp ...

  10. 对Elastic集群内部配置TLS加密通信及身份验证

    1.介绍 官方宣布从6.8和7.1开始,免费提供多项安全功能.其中包括tls加密通信,基于角色访问控制等功能. 可以使用企业CA证书来完成这一步骤,但是一般情况下,我们可以通过elasticsearc ...