2373. 矩阵中的局部最大值

简介: 给你一个大小为 n x n 的整数矩阵 grid 。生成一个大小为 (n - 2) x (n - 2) 的整数矩阵  maxLocal ,并满足:maxLocal[i][j] 等于 grid 中以 i + 1 行和 j + 1 列为中心的 3 x 3 矩阵中的 最大值 。换句话说,我们希望找出 grid 中每个 3 x 3 矩阵中的最大值。返回生成的矩阵。

给你一个大小为 n x n 的整数矩阵 grid 。

生成一个大小为 (n - 2) x (n - 2) 的整数矩阵  maxLocal ,并满足:

maxLocali 等于 grid 中以 i + 1 行和 j + 1 列为中心的 3 x 3 矩阵中的 最大值 。
换句话说,我们希望找出 grid 中每个 3 x 3 矩阵中的最大值。

返回生成的矩阵。

示例 1:

输入:grid = [[9,9,8,1],[5,6,2,6],[8,2,6,4],[6,2,2,2]]
输出:[[9,9],[8,6]]
注意,生成的矩阵中,每个值都对应 grid 中一个相接的 3 x 3 矩阵的最大值。
示例 2:

输入:grid = [[1,1,1,1,1],[1,1,1,1,1],[1,1,2,1,1],[1,1,1,1,1],[1,1,1,1,1]]
输出:[[2,2,2],[2,2,2],[2,2,2]]
解释:注意,2 包含在 grid 中每个 3 x 3 的矩阵中。
 

提示:

n == grid.length == grid[i].length
3 <= n <= 100
1 <= gridi <= 100

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/largest-local-values-in-a-matrix

c++代码实现:

class Solution {
public:

vector<vector<int>> largestLocal(vector<vector<int>>& grid) {
    int n=grid.size();
    vector<vector<int>> ret(n-2,vector<int>(n-2,0)); 
    //用于保存返回的结果
    for(int i=0;i<n;i++)
      {   

// 第i行第j个元素保存 gridi,gridi,gridi的最大值,最左边的位置来保存,这样覆盖不掉后面的元素

      for(int j=0;j+2<n;j++)
       {

//j+2确保后面有3个元素

gridi=max(gridi,max(gridi,gridi));//也是向左覆盖

        }
    }
    for(int j=0;j+2<n;j++)
 { 

// 只需要计算n-2列就可以了,比如某j列中的第i个元素,保存 gridi,gridi,gridi的最大值,

    //同理,某j列中的第i+1个元素,保存 grid[i+1][j],grid[i+1][j+1],grid[i+1][j+2]的最大值

可以直接放到ret里

        for(int i=0;i+2<n;i++)
        {
            ret[i][j]=max(grid[i][j],max(grid[i+1][j],grid[i+2][j]));
        }
    }
    return ret;
}

};
二:
class Solution {
public:

vector<vector<int>> largestLocal(vector<vector<int>>& grid) {
     int n = grid.size();

vector<vector> res(n - 2, vector(n - 2, 0));

    for (int i = 0; i < n - 2; i++)
     {
    for (int j = 0; j < n - 2; j++)
     {
    for (int x = i; x < i + 3; x++) 
    {
    for (int y = j; y < j + 3; y++)
     {
    res[i][j] = max(res[i][j], grid[x][y]);
    }  
    }
    }
    }
    return res;
}

};

目录
相关文章
|
1月前
如何判别三角形和求10 个整数中最大值?
如何判别三角形和求10 个整数中最大值?
|
1月前
|
算法 前端开发
最小化数组中的最大值
最小化数组中的最大值
24 0
|
8月前
|
存储 人工智能 算法
聚类的k值确定之轮廓系数
聚类的k值确定之轮廓系数
490 0
|
1月前
|
算法 BI 测试技术
【唯一分解定理 数学】1808好因子的最大数目
【唯一分解定理 数学】1808好因子的最大数目
【唯一分解定理 数学】1808好因子的最大数目
|
1月前
|
机器学习/深度学习 存储 人工智能
利用前缀和计算二维矩阵子矩阵的和
利用前缀和计算二维矩阵子矩阵的和
35 0
|
8月前
|
算法 测试技术 C#
C++前缀和算法:构造乘积矩阵
C++前缀和算法:构造乘积矩阵
|
10月前
|
算法
算法篇之二分查找(第74题探索二维矩阵、第287题寻找重复数)
算法篇之二分查找(第74题探索二维矩阵、第287题寻找重复数)
89 0
|
人工智能
求矩阵的局部极大值
求矩阵的局部极大值
88 0
|
算法
LeetCode 73矩阵置零&74搜素二维矩阵&75颜色分类
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
107 0
LeetCode 73矩阵置零&74搜素二维矩阵&75颜色分类
|
机器学习/深度学习 算法
梯度下降算法主要通过哪两个控制因子实现最优参数选择?这两个因子分别起到什么作用?为什么计算损失函数最优值采用梯度下降算法而不是直接对损失函数求导数等于0时的最优解?如何判断梯度下降算法是否正确工作?
梯度下降算法主要通过哪两个控制因子实现最优参数选择?这两个因子分别起到什么作用?为什么计算损失函数最优值采用梯度下降算法而不是直接对损失函数求导数等于0时的最优解?如何判断梯度下降算法是否正确工作? 梯度下降算法有两个重要的控制因子:一个是步长,由学习率控制;一个是方向,由梯度指定。 1.在梯度下降算法中,步长决定了每一次迭代过程中,会往梯度下降的方向移动的距离。试想一下,如果步长很大,算法会在局部最优点附近来回跳动,不会收敛(如下图);但如果步长太短,算法每步的移动距离很短,就会导致算法收敛速度很慢。 2
196 0