题目如下:

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. Python学习之并发基础知识

    8 并发编程 8.1 基础知识 8.1.1 操作系统的定义 操作系统是存在于硬件与软件之间,管理.协调.调度软件与硬件的交互. 资源管理解决物理资源数量不足和合理分配资源这两个问题, 通俗来说,操作系 ...

  2. C++随笔(0)——关于const

    最近发现自己对const这一块其实不甚熟悉,所以复习一下const的相关知识点. 基本用法 const int bufSize = 512; 上面这样就可以将bufSize定义为常量,编译的时候编译器 ...

  3. vue --》动态路由的实现 (根据用户的权限来访问对应的模块)

    为了设置用户的访问权限,所以在一个vue工程中,往往需要前端和后端开发人员共同配合设置动态路由, 进而实现根据用户的权限来访问对应的模块 1.首先在登录页面,前端跟据后端返回的路由信息进行配置,配置后 ...

  4. 微信小程序 ----- this.getOpenerEventChannel is not a function

    小程序 添加新的功能, 页面跳转后,通过事件的发布订阅,实现 from => to 或者 to=> from 数据传递 1. 跳转到指定页面. 通过 wx.navigateTo() .请参 ...

  5. linux free 命令 查看内存使用情况

    查看Linux服务器下的内存使用情况,可以使用命令free -m [root@localhost ~]$ free // 以KB为单位显示内存使用情况 [root@localhost ~]$ free ...

  6. Hive-Container killed by YARN for exceeding memory limits. 9.2 GB of 9 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.

    Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task times, most recen ...

  7. poj2773(欧基里德算法 或 二分+容斥)

    题目链接:https://vjudge.net/problem/POJ-2773 题意:给定m,k,求与m互质的第k个数. 思路一:利用gcd(a,b)=gcd(b*t+a,b)知道,与m互质的数是以 ...

  8. BATJ的常见java面试题

    JAVA基础 JAVA中的几种基本数据类型是什么,各自占用多少字节. String类能被继承吗,为什么. 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允 ...

  9. WebDriverWait类以及类常用的方法

    WebDriverWait类提供了显式等待和隐式等待,显式等待的等待时间是固定的,固定了10s就必须等待10s,隐式等待的等待时间是个范围,例如最大10s,那么如果在3s的时候程序达到预期的结果,那么 ...

  10. MUI沉浸式代码

    var ben_immer = (function() { var immersed = 0; var ms = (/Html5Plus\/.+\s\(.*(Immersed\/(\d+\.?\d*) ...