【leetcode】Largest Plus Sign
题目如下:
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的更多相关文章
- 【LeetCode】Largest Number 解题报告
[LeetCode]Largest Number 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/largest-number/# ...
- 【leetcode】Largest Number
题目简述: Given a list of non negative integers, arrange them such that they form the largest number. Fo ...
- 【leetcode】Largest Number ★
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- 【Leetcode】Largest Rectangle in Histogram
Given n non-negative integers representing the histogram's bar height where the width of each bar is ...
- 【LeetCode】动态规划(下篇共39题)
[600] Non-negative Integers without Consecutive Ones [629] K Inverse Pairs Array [638] Shopping Offe ...
- 【LeetCode】764. Largest Plus Sign 解题报告(Python)
[LeetCode]764. Largest Plus Sign 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn ...
- 【LeetCode】813. Largest Sum of Averages 解题报告(Python)
[LeetCode]813. Largest Sum of Averages 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...
- 53. Maximum Subarray【leetcode】
53. Maximum Subarray[leetcode] Find the contiguous subarray within an array (containing at least one ...
- 【LeetCode】排序 sort(共20题)
链接:https://leetcode.com/tag/sort/ [56]Merge Intervals (2019年1月26日,谷歌tag复习) 合并区间 Input: [[1,3],[2,6], ...
随机推荐
- Eclipse 包含头文件 添加环境变量
Eclipse 中新建C 或C ++到项目时,头文件报警,显示“Unresolved inclusion:<stdio.h>” 虽然不影响项目到编译和运行,确也无法查看头文件,让人感觉实在 ...
- web.xml文件的的param-name
第一个阶段 配置阶段 web.xml配置,如下图 第二个阶段 初始化阶段 init(ServletConfig config) 1.加载配置文件 获取web.xml文件的的param-name ...
- docker安装jenkins自动化部署
Docker之Jenkins自动化部署 1.拉取jenkins镜像images(类比:java中的类) docker pull jenkinsci/jenkins:lts 或 docker pull ...
- [转帖]教你如何修改运行中的docker容器的端口映射
教你如何修改运行中的docker容器的端口映射 在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当dock ...
- System.InsufficientMemoryException:无法分配536870912字节的托管内存缓冲区。可用内存量可能不足
一个病人住院太久,一次性打印护理表单超过3000条时报如标题所示的错误, 个人查阅分析应该可以从如下几方面入手: 一:查看程序客户端和服务端的配置文件相关属性是否限制了缓存最大值 (应该不是这个问题, ...
- python 向下取整,向上取整,四舍五入
# python 向下取整 floor 向上取整ceil 四舍五入 round import math num=3.1415926 # 向上取整 print(math.ceil(num)) # 向下取 ...
- python pycharm 注册码
D87IQPUU3Q-eyJsaWNlbnNlSWQiOiJEODdJUVBVVTNRIiwibGljZW5zZWVOYW1lIjoiTnNzIEltIiwiYXNzaWduZWVOYW1lIjoiI ...
- java使用Callable创建又返回值的线程
并发编程使我们可以将程序分为很多个分离的,相互之间独立的任务,通过使用多线程的机制,将每个任务都会有一个执行线程来单独的驱动,一个线程是 进程中一个单一顺序控制流,一个进程可以拥有多个线程,也就相当于 ...
- 解决 "Could not autowire. No beans of 'SationMapper' type found" 的问题
网上查找的方法,附上原文链接:https://blog.csdn.net/Coder_Knight/article/details/83999139 方法1:在mapper文件上加@Repositor ...
- Proxy&Reflect
大部分时候我们使用的都是前置代理, 即我们把直接和代理对象进行交互(所有操作都发生在代理对象身上)的方式叫做前置代理. 那什么是后置代理? 借助原型链机制, 我们直接和 obj 进行交互而不是和代理对 ...