764. 最大加号标志
在一个 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 。
- 输入: n = 5, mines = [[4, 2]]
- 输出: 2
- 解释: 在上面的网格中,最大加号标志的阶只能是2。一个标志已在图中标出。
暴力
循环每一个点,然后判断每个点能组成十字标识的最大值。时间复杂度为O(N^3)。但这题的数据范围很小1 <= n <= 500。于是,尝试着提交了,居然过了。。。。。。
class Solution {
public:
int orderOfLargestPlusSign(int n, vector<vector<int>>& mines) {
vector<vector<int>>maps(n,vector<int>(n));
for(int i=0;i<mines.size();i++){
maps[mines[i][0]][mines[i][1]]=1;
}
int res=0;
for(int row=0;row<n;row++){
for(int col=0;col<n;col++){
//枚举每一个点
if(!maps[row][col]){
int temp=1;
int k=1;
for(k;(row-k>=0&&row+k<n&&col-k>=0&&col+k<n);k++){
if(!(row-k>=0&&row+k<n&&col-k>=0&&col+k<n)) break;
if(maps[row+k][col]==0&&maps[row-k][col]==0&&maps[row][col+k]==0&&maps[row][col-k]==0){
temp++;
}
else{
break;
}
}
res=max(res,temp);
}
}
}
return res;
}
};
标签:标志,mines,764,网格,grid,加号,&&
From: https://www.cnblogs.com/SkyDusty/p/16873886.html