数组之图片平滑器

数组之图片平滑器

问题:

在这里插入图片描述

思路:

蛮力法:
需遍历二维数组中的所有元素,先确定边界。
当 当前遍历元素所在行的上一行和下一行存在时,需遍历3行元素;
当 当前遍历元素所在列的左列和右列存在时,需遍历3列元素;
设当前遍历元素所在位置为i行j列,整个矩阵为m行n列
当上一行不存在时,i-1<0,此时当前行为第0行,行遍历的范围从0行开始
当下一行不存在时,i+1>=m,i>=m-1,此时当前行为m-1行,行遍历的结束为m-1行
当左列不存在时,列遍历范围从0列开始
当右列不存在时,列遍历结束为n-1列
因此遍历范围为:
行: max(0,i-1)~min( i+1,m-1 )
列: max(0,j-1)~min( j+1,n-1 )
max(a,b),min(a,b)为STL函数库中头文件包含的函数

代码:

class Solution {
public:
    vector<vector<int>> imageSmoother(vector<vector<int>>& M) {
        int m=M.size();
        int n=M.front().size();
        vector<vector<int>> ans( m,vector<int>(n) );
        int i;
        int j;
        int p;
        int q;
        int count;
        int num;
        for( i=0;i<m;i++ )
            for( j=0;j<n;j++ )
            {   
                count=0;
                num=0;
                for( p=max(0,i-1);p<=min( i+1,m-1 );p++ )
                    for( q=max(0,j-1);q<=min( j+1,n-1 );q++ )
                    {
                        count+=M[p][q];
                        num++;
                    }
                ans[i][j]=count/num;
            }
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44709990/article/details/105791519