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 ...
随机推荐
- STL 小白学习(8) set 二叉树
#include <iostream> using namespace std; #include <set> void printSet(set<int> s) ...
- web前端学习python之第一章_基础语法(二)
web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- 前端必备之Node+mysql+ejs模版如何写接口
前端必备之Node+mysql+ejs模版如何写接口 这星期公司要做一个视频的后台管理系统, 让我用Node+mysql+ejs配合写接口, 周末在家研究了一下, 趁还没来具体需求把研究内容在这里分享 ...
- PROJ.4学习——坐标系转换
PROJ.4学习——坐标系转换 前言 PROJ可以做任从最简单的投影到许多参考数据非常复杂的转换.PROJ最初是作为地图投影工具开发的,但随着时间的推移,它已经发展成为一个强大的通用坐标转换引擎,可以 ...
- C# Thread Lock 笔记
多线程, 当使用共有变量时, 保持计算结果正确很重要: 看下面的例子: ; //private static object objlock = new object(); public static ...
- JS JQ 深拷贝之坑
之前做留言板的时候,我就被深拷贝坑了一次,这次做API管理系统,没想到又被深拷贝坑了一次. 最后,拷贝对象的时候,如果要用到对象里的prototype,一定要用$.extend(true,{},要拷贝 ...
- asp.net IHttpHandler浅析
在asp.net程序中,我们可以通过配置url的path路径的方式,将某个path路径下的请求交给指定的IHttpHandler去处理,这便是对request请求进行编程. 一.新建一个framewo ...
- Spring _day01_下载、概述、监听器
Spring:SE/EE开发的一站式框架. .一站式框架:有EE开发的每一层解决方案. . WEB层 :SpringMVC . Service层 :Spring的Bean管理,Spring ...
- ES(Elasticsearch)
基本概念 Elasticsearch是一个实时分布式搜索和分析引擎 支持: 全文搜索 结构化搜索 分析 可以这样进行描述: 分布式的实时文件存储,每个字段都被索引并可被搜索 分布式的实时分析搜索引擎 ...
- python笔记22-常用模块
模块就是一个python文件,用哪个模块就要import哪个模块 1.调用模块 # import model #import的本质就是把这个python从头到尾执行一遍## model.run1()# ...