首页 > 编程语言 >764. 最大加号标志 ----- 动态规划、C++ STL:无序set容器unordered_set、分类思想

764. 最大加号标志 ----- 动态规划、C++ STL:无序set容器unordered_set、分类思想

时间:2022-11-09 20:00:44浏览次数:49  
标签:count set int banned mines 764 ++ C++ dp

在一个 n x n 的矩阵 grid 中,除了在数组 mines 中给出的元素为 0,其他每个元素都为 1。mines[i] = [xi, yi]表示 grid[xi][yi] == 0

返回  grid 中包含 1 的最大的 轴对齐 加号标志的阶数 。如果未找到加号标志,则返回 0 。

一个 k 阶由 1 组成的 “轴对称”加号标志 具有中心网格 grid[r][c] == 1 ,以及4个从中心向上、向下、向左、向右延伸,长度为 k-1,由 1 组成的臂。注意,只有加号标志的所有网格要求为 1 ,别的网格可能为 0 也可能为 1 。

 

示例 1:

 

输入: n = 5, mines = [[4, 2]]
输出: 2
解释: 在上面的网格中,最大加号标志的阶只能是2。一个标志已在图中标出。
示例 2:

 

输入: n = 1, mines = [[0, 0]]
输出: 0
解释: 没有加号标志,返回 0 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/largest-plus-sign
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
public:
    int orderOfLargestPlusSign(int n, vector<vector<int>>& mines) {
        vector<vector<int>> dp(n, vector<int>(n, n)); // 初始化延申值为n
        unordered_set<int> banned; //创建无序set容器banned来储存mines数组里的坐标
        for (auto &&vec : mines) { //迭代器遍历
            banned.emplace(vec[0] * n + vec[1]); 
            // 将mines数组中的坐标grid[xi][yi]以 xi * n + yi的方式添加到banned中
        }
        int ans = 0; // K值
        for (int i = 0; i < n; i++) { // 遍历这个矩阵。以每个点为中心点
            int count = 0; // 设置计数器统计阶数
            /* left */
            for (int j = 0; j < n; j++) { // 遍历方向向右,计数器数目代表在该点左边的延申值+1
                if (banned.count(i * n + j)) { // 在banned中查找key值为 i * n + j 的数量
                    count = 0; // 在banned中找到说明该坐标处为0
                } else {
                    count++; // 没找到 计数器++
                }
                dp[i][j] = min(dp[i][j], count); // 将该点最大的延申值(K) 赋值给dp[i][j]
            }
            count = 0; // 计数器归零
            /* right */ 
            for (int j = n - 1; j >= 0; j--) { // 遍历方向向左,计数器数目代表在该点右边的延申值+1
                if (banned.count(i * n + j)) {
                    count = 0;
                } else {
                    count++;
                }
                dp[i][j] = min(dp[i][j], count);
            }
        }
        for (int i = 0; i < n; i++) {
            int count = 0;
            /* up */
            for (int j = 0; j < n; j++) { //遍历方向向下,计数器数目代表在该点上方的延申值+1
                if (banned.count(j * n + i)) {
                    count = 0;
                } else {
                    count++;
                }
                dp[j][i] = min(dp[j][i], count);
            }
            count = 0;
            /* down */
            for (int j = n - 1; j >= 0; j--) { //遍历方向向上,计数器数目代表在该点下方的延申值+1
                if (banned.count(j * n + i)) {
                    count = 0;
                } else {
                    count++;
                }
                dp[j][i] = min(dp[j][i], count);
                ans = max(ans, dp[j][i]);// 找所有坐标中延申值最大的
            }
        }
        return ans;
    }
};

 

标签:count,set,int,banned,mines,764,++,C++,dp
From: https://www.cnblogs.com/slowlydance2me/p/16874993.html

相关文章

  • C++中如何实现创建文件夹
    C++中如何实现创建文件夹:使用system()调用dos命令#include<iostream>usingnamespacestd;intmain(){stringfolderPath="E:\\database\\testFolder";......
  • ACdream 1430 SETI
    Description   AmateurastronomersTomandBobtrytofindradiobroadcastsofextraterrestrialcivilizationsinthe air.Recentlytheyreceivedsomes......
  • 判断文件或文件夹(目录)是否存在(状态) C/C++ win/linux通用
    一、windows下使用_access()或linux下使用access()函数判断文件状态windows下使用_access()函数所在头文件:<io.h>函数原型:int_access(constchar*_Filename,int_Acces......
  • 事件坐标screenX、clientX、pageX、offsetX的区别
    1、screenX和screenY参照点:电脑屏幕左上角screenX:鼠标点击位置相对于电脑屏幕左上角的水平偏移量screenY:鼠标点击位置相对于电脑屏幕左上角的垂直偏移量2、clientX和c......
  • 元素的offsetWidth\offsetHeight、offsetLeft\offsetTop等等
    偏移量(offsetdimension)偏移量:包括元素在屏幕上占用的所有可见空间,元素的可见大小由其高度,宽度决定,包括所有内边距,滚动条和边框大小(注意,不包括外边距)。以下4个属性可以......
  • Setup time和Hold time:早来、晚走
    最近看时序分析,关于建立时间和保持时间,《时序约束和分析》里面有非常详细的描述,但是看起来太痛苦了。对于建立时间和保持时间浅显理解归为一句话:数据传输相对于clk不能太......
  • 问题 L: 零基础学C/C++157——保留尾部*
    该题与前面的删除前导一样,之前我们是找到第一个不是的字符,那么现在一样的,我们可以从后往前找,找到第一个不是的字符将其前面的删除(不输出)点击查看代码#include<stdio.h>......
  • 20-jmeter-SetUp线程组批量登录并保存token文件
    前言我们在压测接口的时候,需批量获取多个用户登录后返回的token值,那么在setUp线程组可以先批量登录后把token保存到本地csv文件,后面的接口引用这个csv文件的数据参数化。......
  • 764. 最大加号标志
    764.最大加号标志在一个nxn的矩阵 grid 中,除了在数组 mines 中给出的元素为 0,其他每个元素都为 1。mines[i]=[xi,yi]表示 grid[xi][yi]==0返回 grid......
  • C++常见报错信息和原因的对应关系
    1.无法找到xxx.dll没有把动态链接库和exe放在一个文件夹下2.不允许使用不完整的类型指的是忘了加头文件3.linkerr、无法解析的外部符号指的是lib......