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 ...
随机推荐
- Java IO编程全解(四)——NIO编程
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7793964.html 前面讲到:Java IO编程全解(三)——伪异步IO编程 NIO,即New I/O,这 ...
- sface
单步检测方法分为两类:anchor-based如ssd.RetinaNet;2)Anchor-free 如DenseBox.UnitBox;anchor-based处理的尺度范围虽小,更精准:anch ...
- __name__ __doc__ __package__
__name__只有主程序调用才可以 如果自己的唯一入口被调用 if __name__ == '__main__' : 才执行下面的代码 """ 这个是format的注释 ...
- 用Tensorflow搭建神经网络的一般步骤
用Tensorflow搭建神经网络的一般步骤如下: ① 导入模块 ② 创建模型变量和占位符 ③ 建立模型 ④ 定义loss函数 ⑤ 定义优化器(optimizer), 使 loss 达到最小 ⑥ 引入 ...
- 活代码LINQ——09
一.代码 ' Fig. 9.7: LINQWithListCollection.vb ' LINQ to Objects using a List(Of String). Module LINQWit ...
- shiro的单机版 和 集群版
在我们的开发当中 我们一般权限都是个 比较繁琐 但又必不可少的 一部分 [不管我们的 数据库设计 还是我们采用何种技术 我们的权限库表 大多都是大同小异 业务逻辑也是如此] 在我们不使用任何框架 ...
- ionic2中使用datetime组件如何默认设置当前时间?
HTML: <ion-item> <span item-left style="min-height: 27px;">存款日期/时间</span> ...
- Ruby中puts,print,p的区别
如果字符串的行尾没有包含换行符,puts就会添加一个,但print不会: print会精确打印内容并让光标留在末尾(在某些系统平台,在程序输出的末尾会自动换行): p会输出一个审查字符串,它通常会包含 ...
- Linux基础命令--date
date命令格式用法 yao@yao:~/shells/tmp$ date +%Y%m%d20190405 yao@yao:~/shells/tmp$ date +%Y%m%d%H%M%S201904 ...
- response导出Excel(一个新手的记录,可以时常查看,以免自己忘记)
HttpResponse response = HttpContext.Current.Response; response.ContentEncoding = System.Text.Encodi ...