leetcode 764.Largest Plus Sign
根据题意的话就是在非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的更多相关文章
- 【LeetCode】764. Largest Plus Sign 解题报告(Python)
[LeetCode]764. Largest Plus Sign 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn ...
- 764. Largest Plus Sign最大的dfs十字架
[抄题]: 求挖掉一些区域后,能允许出现的最大十字架 In a 2D grid from (0, 0) to (N-1, N-1), every cell contains a 1, except t ...
- 【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 ...
- 764. Largest Plus Sign
题目大意: 就是一个由1和0组成的正方形矩阵,求里面最大的加号的大小,这个大小就是长度. 什么鬼啊,本来想自己想的,结果看了半天没看懂具体什么意思,然后查了下题解,希望有人说一下意思,结果一上来就是思 ...
- [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 ...
- [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 ...
- LeetCode 84. Largest Rectangle in Histogram 单调栈应用
LeetCode 84. Largest Rectangle in Histogram 单调栈应用 leetcode+ 循环数组,求右边第一个大的数字 求一个数组中右边第一个比他大的数(单调栈 Lee ...
- 【LeetCode】Largest Number 解题报告
[LeetCode]Largest Number 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/largest-number/# ...
- [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 ...
随机推荐
- freemarker导出word档
1.word另存为xml:2.xml文件后缀名改成ftl:3.编写完整json字符串备用:4.修改ftl中动态字段为json中对应字段名:5.编写java代码自动生成word文件:(注意:换行用< ...
- webpack实践笔记
1)cross-env 能跨平台地设置及使用环境变量 大多数情况下,在windows平台下使用类似于: NODE_ENV=production的命令行指令会卡住,windows平台与POSIX在使用命 ...
- Django数据同步过程中遇到的问题:
1.raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__ve ...
- js判断数组是否有重复值
function isRepeat(arr) { var hash = {}; for(var i in arr) { if(hash[arr[i]]) return true; hash[arr[i ...
- FORTH 发展(部分)
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- C# 比较两文本相似度
这个比较文本用到的主要是余弦定理比较文本相似度,具体原理右转某度,主要适用场景是在考试系统中的简答题概述,可根据权重自动打分,感觉实用性蛮广的. 先说下思路: 文本分词,中文于英文不同,规范的英文每个 ...
- 把玩Fedora29操作系统
reference: https://ask.csdn.net/questions/657608 1.下载Fedora服务器版操作系统 https://getfedora.org/zh_CN/se ...
- css a的伪类顺序
a:link {color: #FF0000} /* 未访问的链接 */ a:visited {color: #00FF00} /* 已访问的链接 */ a:hover {color: #FF00FF ...
- web前端之Javascript---function函数
---恢复内容开始--- js 支持两种函数:一类是语言内部的函数(如eval() ),另一类是自己创建的. 在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部 ...
- cdh集群认证命令
1.集群认证命令 kinit -kt csliyb.keytab csliyb 2.查看认证有效期命令 klist命令 3.延长认证有效期命令 kinit -R 4.手动认证失效命令 kdestroy