📌  相关文章
📜  距离K以内的矩阵中的最大相邻元素

📅  最后修改于: 2021-04-21 21:38:51             🧑  作者: Mango

给定矩阵mat [] []和整数K ,任务是为矩阵的每个元素在K的绝对距离内找到最大邻居。
换句话说,对于每个Matrix [i] [j],找到最大Matrix [p] [q],使得abs(ip)+ abs(jq)≤K。
例子:

方法:想法是在1到K的循环中进行迭代,以从距离小于或等于K的邻居中选择元素。每次,在矩阵上进行迭代以找到矩阵中每个元素的最大相邻元素。
下面是上述方法的实现:

C++
// C++ implementation to find the
// maximum neighbor element within
// the distance of less than K
 
#include 
 
using namespace std;
 
// Function to print the matrix
void printMatrix(vector > A)
{
    // Loop to iterate over the matrix
    for (int i = 0; i < A.size(); i++) {
        for (int j = 0; j < A[0].size(); j++)
            cout << A[i][j] << ' ';
        cout << '\n';
    }
}
 
// Function to find the maximum
// neighbor within the distance
// of less than equal to K
vector > getMaxNeighbour(
        vector >& A, int K)
{
    vector > ans = A;
     
    // Loop to find the maximum
    // element within the distance
    // of less than K
    for (int q = 1; q <= K; q++) {
        for (int i = 0; i < A.size(); i++) {
            for (int j = 0; j < A[0].size(); j++) {
                int maxi = ans[i][j];
                if (i > 0)
                    maxi = max(
                        maxi, ans[i - 1][j]);
                if (j > 0)
                    maxi = max(
                        maxi, ans[i][j - 1]);
                if (i < A.size() - 1)
                    maxi = max(
                        maxi, ans[i + 1][j]);
                if (j < A[0].size() - 1)
                    maxi = max(
                        maxi, ans[i][j + 1]);
                A[i][j] = maxi;
            }
        }
        ans = A;
    }
    return ans;
}
 
// Driver Code
int main()
{
    vector > B = { { 1, 2, 3 },
                  { 4, 5, 6 }, { 7, 8, 9 } };
    printMatrix(getMaxNeighbour(B, 2));
    return 0;
}


Java
// Java implementation to find the
// maximum neighbor element within
// the distance of less than K
import java.util.*;
 
class GFG{
 
// Function to print the matrix
static void printMatrix(int [][] A)
{
     
    // Loop to iterate over the matrix
    for(int i = 0; i < A.length; i++)
    {
       for(int j = 0; j < A[0].length; j++)
          System.out.print(A[i][j] + " ");
       System.out.print('\n');
    }
}
 
// Function to find the maximum
// neighbor within the distance
// of less than equal to K
static int [][] getMaxNeighbour(int [][] A,
                                int K)
{
    int [][] ans = A;
     
    // Loop to find the maximum
    // element within the distance
    // of less than K
    for(int q = 1; q <= K; q++)
    {
       for(int i = 0; i < A.length; i++)
       {
          for(int j = 0; j < A[0].length; j++)
          {
             int maxi = ans[i][j];
             if (i > 0)
                 maxi = Math.max(maxi,
                                 ans[i - 1][j]);
             if (j > 0)
                 maxi = Math.max(maxi,
                                 ans[i][j - 1]);
             if (i < A.length - 1)
                 maxi = Math.max(maxi,
                                 ans[i + 1][j]);
             if (j < A[0].length - 1)
                 maxi = Math.max(maxi,
                                 ans[i][j + 1]);
             A[i][j] = maxi;
          }
       }
       ans = A;
    }
    return ans;
}
 
// Driver Code
public static void main(String[] args)
{
    int [][] B = { { 1, 2, 3 },
                   { 4, 5, 6 },
                   { 7, 8, 9 } };
                    
    printMatrix(getMaxNeighbour(B, 2));
}
}
 
// This code is contributed by Princi Singh


Python3
# Python3 implementation to find the
# maximum neighbor element within
# the distance of less than K
  
# Function to print the matrix
def printMatrix(A):
 
    # Loop to iterate over the matrix
    for i in range(len(A)):
        for j in range(len(A[0])):
            print(A[i][j], end = ' ')
        print()
          
# Function to find the maximum
# neighbor within the distance
# of less than equal to K
def getMaxNeighbour( A, K ):
 
    ans = A;
      
    # Loop to find the maximum
    # element within the distance
    # of less than K
    for q in range(1, K + 1):
        for i in range(len(A)):
            for j in range(len(A[0])):
                 
                maxi = ans[i][j];
                 
                if (i > 0):
                    maxi = max(maxi, ans[i - 1][j]);
                if (j > 0):
                    maxi = max(maxi, ans[i][j - 1]);
                     
                if (i < len(A) - 1):
                    maxi = max(maxi, ans[i + 1][j]);
                     
                if (j < len(A[0]) - 1):
                    maxi = max(maxi, ans[i][j + 1]);
                     
                A[i][j] = maxi;
 
        ans = A;
     
    return ans;
  
# Driver Code
if __name__=='__main__':
 
    B = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
    printMatrix(getMaxNeighbour(B, 2));
     
# This code is contributed by ruttvik_56


C#
// C# implementation to find the
// maximum neighbor element within
// the distance of less than K
using System;
 
class GFG{
 
// Function to print the matrix
static void printMatrix(int [,] A)
{
     
    // Loop to iterate over the matrix
    for(int i = 0; i < A.GetLength(0); i++)
    {
       for(int j = 0; j < A.GetLength(1); j++)
          Console.Write(A[i, j] + " ");
       Console.Write('\n');
    }
}
 
// Function to find the maximum
// neighbor within the distance
// of less than equal to K
static int [,] getMaxNeighbour(int [,] A,
                               int K)
{
    int [,] ans = A;
     
    // Loop to find the maximum
    // element within the distance
    // of less than K
    for(int q = 1; q <= K; q++)
    {
       for(int i = 0; i < A.GetLength(0); i++)
       {
          for(int j = 0; j < A.GetLength(1); j++)
          {
             int maxi = ans[i, j];
             if (i > 0)
                 maxi = Math.Max(maxi,
                                 ans[i - 1, j]);
             if (j > 0)
                 maxi = Math.Max(maxi,
                                 ans[i, j - 1]);
             if (i < A.GetLength(0) - 1)
                 maxi = Math.Max(maxi,
                                 ans[i + 1, j]);
             if (j < A.GetLength(0) - 1)
                 maxi = Math.Max(maxi,
                                 ans[i, j + 1]);
             A[i, j] = maxi;
          }
       }
       ans = A;
    }
    return ans;
}
 
// Driver Code
public static void Main(String[] args)
{
    int [,] B = { { 1, 2, 3 },
                  { 4, 5, 6 },
                  { 7, 8, 9 } };
                     
    printMatrix(getMaxNeighbour(B, 2));
}
}
 
// This code is contributed by Princi Singh


输出:
7 8 9 
8 9 9 
9 9 9

时间复杂度: O(M * N * K)
空间复杂度: O(M * N)