原题链接:https://leetcode-cn.com/problems/largest-plus-sign/

动态规划

dp[i][j]表示从上下左右四个方向到[i,j]这个点的最小累积

状态转移

dp[i][j]=0       当走到mines数组的点时
dp[i][j]=count+1  当第一次走到非mines数组的点时
dp[i][j]=min(dp[i][j],count) 当非第一次走到非mines数组的点时,就是从其他方向

代码:

int orderOfLargestPlusSign(int N, vector<vector<int>>& mines) {set<int> ban;vector<vector<int>> dp(N,vector<int>(N,0));for(auto mine:mines){int i=mine[0];//行数目int j=mine[1];//列数目ban.insert(i*N+j);}int count;for(int i=0;i<N;i++){count=0;for(int j=0;j<N;j++){//行扫描,从左向右int num=i*N+j;count=ban.count(num)?0:count+1;dp[i][j]=count;}count=0;for(int j=N-1;j>=0;j--){//行扫描,从右向左int num=i*N+j;count=ban.count(num)?0:count+1;dp[i][j]=min(dp[i][j],count);}}int ans=INT_MIN;for(int j=0;j<N;j++){count=0;for(int i=0;i<N;i++){//列扫描,从上到下int num=i*N+j;count=ban.count(num)?0:count+1;dp[i][j]=min(dp[i][j],count);}count=0;for(int i=N-1;i>=0;i--){//行扫描,从下到上int num=i*N+j;count=ban.count(num)?0:count+1;dp[i][j]=min(dp[i][j],count);ans=max(ans,dp[i][j]);//找出最大阶}}return ans;
}

但是也会超时,这里是先行扫描、再列扫描,对每个行扫描,进行左扫描和右扫描;对每个列扫描,进行上扫描和下扫描。代码还能优化,同时对第i行第j列和第j行第i列同时进行上下左右扫描吗,并且就在dp上进行操作。

dp[i][j]表示以(i,j)为中心的加号最长长度

代码:

int orderOfLargestPlusSign(int N, vector<vector<int>>& mines) {vector<vector<int>> dp(N,vector<int>(N,INT_MAX));for(auto mine:mines){int i=mine[0];int j=mine[1];dp[i][j]=0;}int count;for(int k=0;k<N;k++){int up=0,down=0,left=0,right=0;for(int i=0,j=N-1;i<N;i++,j--){//第k行从左往右遍历right=(dp[k][i]==0)?0:right+1;dp[k][i]=min(dp[k][i],right);//第k行从右往左遍历left=(dp[k][j]==0)?0:left+1;dp[k][j]=min(dp[k][j],left);//第k列从上往下遍历down=(dp[i][k]==0)?0:down+1;dp[i][k]=min(dp[i][k],down);//第k列从下往上遍历up=(dp[j][k]==0)?0:up+1;dp[j][k]=min(dp[j][k],up);}}int ans=INT_MIN;for(int i=0;i<N;i++){for(int j=0;j<N;j++){ans=max(ans,dp[i][j]);}}return ans;
}

注意dp[i][j] = min(dp[i][j], dp[i][j + 1] + 1)来代替 dp[i][j]=min(dp[i][j],right),因为前者是针对非连续,后者是针对连续

leetcode算法题--最大加号标志★相关推荐

  1. LeetCode算法题-Nth Digit(Java实现)

    这是悦乐书的第215次更新,第228篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第83题(顺位题号是400).找到无限整数序列的第n个数字1,2,3,4,5,6,7,8 ...

  2. LeetCode算法题-Reverse Linked List(Java实现)

    这是悦乐书的第192次更新,第195篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第51题(顺位题号是206).反转单链表.例如: 输入:1-> 2-> 3- ...

  3. LeetCode算法题-Convert a Number to Hexadecimal(Java实现)

    这是悦乐书的第219次更新,第231篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第86题(顺位题号是405).给定一个整数,写一个算法将其转换为十六进制.对于负整数,使 ...

  4. leetcode算法题--零钱兑换

    原题链接:https://leetcode-cn.com/problems/coin-change/ 相关题目:leetcode算法题–完全平方数★ 动态规划 dp[i] i从0到amount,dp[ ...

  5. leetcode算法题-- 买卖股票的最佳时机

    原题链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/ 这类股票题目请见leetcode算法题–最佳买卖股票时机含 ...

  6. leetcode算法题--买卖股票的最佳时机 II

    原题链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 这类股票题目请见leetcode算法题–最佳买卖股票 ...

  7. leetcode算法题--买卖股票的最佳时机含手续费

    原题链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/ 这类股票题目请见 ...

  8. leetcode算法题--完全平方数★

    原题链接:https://leetcode-cn.com/problems/perfect-squares/ 相关题目:leetcode算法题–零钱兑换 1.回溯法 就是暴力法,套路就是递归,但是有很 ...

  9. leetcode算法题--不同的二叉搜索树

    原题链接:https://leetcode-cn.com/problems/unique-binary-search-trees/ 相关题目:leetcode算法题--不同的二叉搜索树 II 1.递归 ...

最新文章

  1. 从技术到科学,中国AI向何处去?
  2. java线程安全性_Java并发-线程安全性
  3. 数据的标准化和标准化方法
  4. 使用IDEA创建maven父子工程项目
  5. matlab基于dct的图像压缩编码解码_基于FPGA的扩频系统设计(下)
  6. jdbc mysql数据类型对比 (版本: 5.1)
  7. CodeForces - 1031B Curiosity Has No Limits(思维)
  8. redis mysql原理_MYSQL MONGODB REDIS 同步原理以及高可用性对比
  9. JavaFX技巧6:使用透明颜色
  10. Linux下新手基本操作及技巧看图上路 (7)
  11. C语言丨栈(二):链栈
  12. 谈谈VIP漂移那点破事
  13. NV21转YUV420P的代码,测试通过
  14. unity对敏感词库处理的记录
  15. 光立方实现3D贪吃蛇
  16. Kali远程控制Android系统(Metasploit)
  17. 王道操作系统知识点总结
  18. Attack Lab
  19. 刷题记录(NC235611 牛牛国的战争,NC23803 DongDong认亲戚,NC235622 叠积木)
  20. 工具类(Excel)[一]

热门文章

  1. python基础语法有哪些-python基本语法有哪些?
  2. python下载安装教程3.8.1-Linux安装Python 3.8.1
  3. python怎么读excel文件-Python读写Excel文件方法介绍
  4. 小学生python-小学生都能学会的python(函数)
  5. Pytorch用tensorboarX查看损失图打不开
  6. mybatis中 Executor的设计与实现
  7. UVa10825 Anagram and Multiplication(dfs)
  8. libevent中的信号处理
  9. Spring boot 梳理 - 在bean中使用命令行参数-自动装配ApplicationArguments
  10. 博客基础_django_python从入门到实践_创建项目_创建应用