首页 > 其他分享 >【119】

【119】

时间:2022-11-09 13:56:29浏览次数:52  
标签:int res mines ++ 加号 119 dp

764. 最大加号标志  

在一个 n x n 的矩阵 grid 中,除了在数组 mines 中给出的元素为 0,其他每个元素都为 1mines[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官方给出的动态规划解法,理解之后自己敲出来

 

 1 class Solution {
 2     public int orderOfLargestPlusSign(int n, int[][] mines) {
 3         int[][] dp = new int[n][n];//用于存放每个位置的加号标志的阶数
 4         for(int i = 0; i < n; i++){//先给每一个位置默认为最大阶
 5             Arrays.fill(dp[i],n);
 6         }
 7 
 8         Set<Integer> mine = new HashSet<Integer>();
 9         for(int[] num : mines){//将所有为0的位置记录下来
10             mine.add(num[0]*n + num[1]);
11         }
12 
13         int count = 0;
14         for(int i = 0; i < n; i++){
15             //left
16             int res = 0;
17             for(int j = 0; j < n; j++){
18                 if(mine.contains(i*n + j)){
19                     res = 0;
20                 }else {
21                     res++;
22                 }
23                 dp[i][j] = Math.min(dp[i][j], res);
24             }
25             //right
26             res = 0;
27             for(int j = n-1; j >= 0; j--){
28                 if(mine.contains(i*n + j)){
29                     res = 0;
30                 }else {
31                     res++;
32                 }
33                 dp[i][j] = Math.min(dp[i][j], res);
34             }
35         }
36         for(int i = 0; i < n; i++){
37             //up
38             int res = 0;
39             for(int j = 0; j < n; j++){
40                 if(mine.contains(j*n + i)){
41                     res = 0;
42                 }else {
43                     res++;
44                 }
45                 dp[j][i] = Math.min(dp[j][i], res);
46             }
47             //down
48             res = 0;
49             for(int j = n-1; j >= 0; j--){
50                 if(mine.contains(j*n + i)){
51                     res = 0;
52                 }else {
53                     res++;
54                 }
55                 dp[j][i] = Math.min(dp[j][i], res);
56                 count = Math.max(dp[j][i], count);
57             }
58         }
59         return count;
60     }
61 }

 

 

标签:int,res,mines,++,加号,119,dp
From: https://www.cnblogs.com/wzxxhlyl/p/16873363.html

相关文章

  • 洛谷 P1195.口袋的天空
    题目链接:https://www.luogu.com.cn/problem/P1195今天上算法设计课,复习一下Kruskal和并查集。 放AC代码1#include<bits/stdc++.h>2usingnamespacestd;3......
  • 洛谷-1198
    洛谷-1198思路这个!辅助解释Code#include<bits/stdc++.h>usingnamespacestd;#define_u_u_ios::sync_with_stdio(false),cin.tie(nullptr)#definecfint_o_o......
  • P1194 买礼物
    ​​传送门​​思路:需要标记哪些通过优惠已经购买了,如果至少有一次是通过优惠购买的,则需要在答案上加上a,因为第一次不是通过优惠购买的。#include<bits/stdc++.h>usingname......
  • 1190. 反转每对括号间的子串
    1190.反转每对括号间的子串给出一个字符串 s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结......
  • P1195 口袋的天空
    最小生成树的板子;使得连通块的数量减小到k即可!数据有点水(printf("NoAnswer");根本没用到QAQ)。#include<bits/stdc++.h>usingnamespacestd;constintN=1e3+7;con......
  • [COMP2119] Searching - Building and Egg Problem
    DescriptionThereisabuildingwith$n$floorsandyouhave$m$eggs.Determinethelowestfloorthrownfromwhichaneggwillbreak.Ifaneggisbroken,it......
  • chrome: css:transform:scale时部分缩放比例相邻图片间有间隔缝隙(chrome 106.0.5249.
    一,问题的表现:页面上左右两个div,里面各有一张图片,图片是相邻的,在页面上应该象一张图一样显示,代码如下:<!--background:#000000;--><divstyle="width:100%;heigh......
  • CF1195E OpenStreetMap
    题目传送门思路单调队列板子。设\(b_{i,j}\)表示第\(i\)行,区间为\(j\)到\(j+y-1\)的最小值,不难发现这个可以用单调队列\(O(nm)\)预处理出来。接下来我们的问......
  • P1194 买礼物
    P1194买礼物普及的题目,而且一眼就能看出该用什么做法。我主要是决定这道题建图的思想值得借鉴,每样东西原本的价格是a,所以新建一个节点0,0向i连边,边权为a,这样一共就有b......
  • LeetCode 1195. Fizz Buzz Multithreaded
    原题链接在这里:https://leetcode.com/problems/fizz-buzz-multithreaded/题目:Youhavethefourfunctions:printFizz thatprintstheword "fizz" totheconsole......