题目如下:

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. 按需加载controller——angular

    一.多视图应用 AngularJS 通过路由支持多视图应用, 可以根据路由动态加载所需的视图.随着视图的不断增加, js文件会越来越多, 而 AngularJS 默认需要把全部的 js 都一次性加载, ...

  2. 【VS开发】【智能语音处理】语音信号处理之(一)动态时间规整(DTW)

    语音信号处理之(一)动态时间规整(DTW) zouxy09@qq.com http://blog.csdn.net/zouxy09 这学期有<语音信号处理>这门课,快考试了,所以也要了解了 ...

  3. [Vuejs] Vue解决代理设置导致浏览器Session丢失的问题

    以下是会造成Session丢失的代理: proxyTable: { '/proxyApi': { target: 'http://111.18.149.215:8080/WRSOCXSystem/ht ...

  4. redis学习(三)

    如何保障reids的数据安全和性能?   一.持久化选项 1.快照snapshotting 它可以将存在于某一时刻的所有数据都写入硬盘里面. 配置选项示例: save 60 1000 注:从最近一次创 ...

  5. CSS基本样式-文本属性

    字体属性 文本属性呢,自我认为就是写文档的一些格式属性,例如:字体颜色,字体加粗,字体大小,字体类型等,而且我们在输出测试用例报告的时候也可以用到这些属性,对测试报告进行优化. <html> ...

  6. gdb笔记 ---《Linux.C编程一站式学习》

    gdb笔记 ---<Linux.C编程一站式学习> 单步执行和跟踪函数调用 函数调试实例 #include <stdio.h> int add_range(int low, i ...

  7. C语言 --- 高级指针

    1. 指针赋值: C语言允许使用赋值运算进行指针的赋值,前提是两个指针具有相同的类型.                 int i,*p,*q;                 p = &i; ...

  8. python requests的content和text方法的区别【转】

    requests对象的get和post方法都会返回一个Response对象,这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等.其中返回的网页部分会存在.content和.text两个对 ...

  9. java 字符串锁

    package com.example.demo.controller; public class StringLock { public void method(String p) { // new ...

  10. 求x到y的最少计算次数 (BFS)

    时间限制:1秒 空间限制:262144K 给定两个-100到100的整数x和y,对x只能进行加1,减1,乘2操作,问最少对x进行几次操作能得到y? 例如:a=3,b=11: 可以通过3*2*2-1,3 ...