根据题意的话就是在非0的地方开始寻找上下左右分别能够走到的最大步长的。

那么使用暴力的方法竟然leetcode还是给过了。

class Solution {
public:
int orderOfLargestPlusSign(int N, vector<vector<int>>& mines) {
int res=;
vector<vector<int>> vis(N, vector<int>(N,));
for(int i=;i<mines.size();i++){
vis[mines[i][]][mines[i][]]=;
}
for(int i=;i<N;i++){
for(int j=;j<N;j++){
if(vis[i][j]){
int step=;
while(judge(vis,N,i,j,step)) step++;
res=max(res,step);
}
}
}
return res;
}
bool judge(vector<vector<int>>&vis,int N, int i,int j, int step){
if(i-step<||i+step>=N||j-step<||j+step>=N) return false;
return vis[i-step][j] &&vis[i+step][j]&&vis[i][j-step]&&vis[i][j+step];
}
};

在这里会发现存在大量的计算冗余的,考虑使用dp的动态规划,利用dp[i][j]来标记在方向上能够移动的最长距离的。

简化算法参考:http://www.cnblogs.com/grandyang/p/8679286.html

向左移动: [i][j]: j在内层循环,从小到大;

向右移动: [i][j]: j在内层循环,从大到小;

向下移动: [i][j]: i在内层循环,从小到大;

向上移动: [i][j]: i在内层循环,从大到小;

class Solution {
public:
int orderOfLargestPlusSign(int N, vector<vector<int>>& mines) {
int res=;
vector<vector<int>> dp(N, vector<int>(N,N));
for(int i=;i<mines.size();i++){
dp[mines[i][]][mines[i][]]=;
}
for(int i=;i<N;i++){
int l=,r=,u=,d=;
for(int j=,k=N-; j<N,k>=; j++,k--){
dp[i][j]=min(dp[i][j], l=(dp[i][j]==)?:l+); // left方向
dp[i][k]=min(dp[i][k], r=(dp[i][k]==)?:r+); // right方向
dp[j][i]=min(dp[j][i], d=(dp[j][i]==)?:d+); // down方向
dp[k][i]=min(dp[k][i], u=(dp[k][i]==)?:u+); // up方向
}
}
for(int i=;i<N*N;i++) res=max(res, dp[i/N][i%N]);
return res;
}
};

leetcode 764.Largest Plus Sign的更多相关文章

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

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

  2. 764. Largest Plus Sign最大的dfs十字架

    [抄题]: 求挖掉一些区域后,能允许出现的最大十字架 In a 2D grid from (0, 0) to (N-1, N-1), every cell contains a 1, except t ...

  3. 【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 giv ...

  4. 764. Largest Plus Sign

    题目大意: 就是一个由1和0组成的正方形矩阵,求里面最大的加号的大小,这个大小就是长度. 什么鬼啊,本来想自己想的,结果看了半天没看懂具体什么意思,然后查了下题解,希望有人说一下意思,结果一上来就是思 ...

  5. [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 lis ...

  6. [Swift]LeetCode764. 最大加号标志 | 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 lis ...

  7. LeetCode 84. Largest Rectangle in Histogram 单调栈应用

    LeetCode 84. Largest Rectangle in Histogram 单调栈应用 leetcode+ 循环数组,求右边第一个大的数字 求一个数组中右边第一个比他大的数(单调栈 Lee ...

  8. 【LeetCode】Largest Number 解题报告

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

  9. [LeetCode] Kth Largest Element in an Array 数组中第k大的数字

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

随机推荐

  1. freemarker导出word档

    1.word另存为xml:2.xml文件后缀名改成ftl:3.编写完整json字符串备用:4.修改ftl中动态字段为json中对应字段名:5.编写java代码自动生成word文件:(注意:换行用< ...

  2. webpack实践笔记

    1)cross-env 能跨平台地设置及使用环境变量 大多数情况下,在windows平台下使用类似于: NODE_ENV=production的命令行指令会卡住,windows平台与POSIX在使用命 ...

  3. Django数据同步过程中遇到的问题:

    1.raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__ve ...

  4. js判断数组是否有重复值

    function isRepeat(arr) { var hash = {}; for(var i in arr) { if(hash[arr[i]]) return true; hash[arr[i ...

  5. FORTH 发展(部分)

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  6. C# 比较两文本相似度

    这个比较文本用到的主要是余弦定理比较文本相似度,具体原理右转某度,主要适用场景是在考试系统中的简答题概述,可根据权重自动打分,感觉实用性蛮广的. 先说下思路: 文本分词,中文于英文不同,规范的英文每个 ...

  7. 把玩Fedora29操作系统

    reference:   https://ask.csdn.net/questions/657608 1.下载Fedora服务器版操作系统 https://getfedora.org/zh_CN/se ...

  8. css a的伪类顺序

    a:link {color: #FF0000} /* 未访问的链接 */ a:visited {color: #00FF00} /* 已访问的链接 */ a:hover {color: #FF00FF ...

  9. web前端之Javascript---function函数

    ---恢复内容开始--- js 支持两种函数:一类是语言内部的函数(如eval() ),另一类是自己创建的. 在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部 ...

  10. cdh集群认证命令

    1.集群认证命令 kinit -kt csliyb.keytab csliyb 2.查看认证有效期命令 klist命令 3.延长认证有效期命令 kinit -R 4.手动认证失效命令 kdestroy