给定矩阵mat [] []和整数K ,任务是为矩阵的每个元素在K的绝对距离内找到最大邻居。
换句话说,对于每个Matrix [i] [j],找到最大Matrix [p] [q],使得abs(ip)+ abs(jq)≤K。
例子:
Input: mat[][] = {{1, 2}, {4, 5}}, K = 1
Output: {{4, 5}, {5, 5}}
Explanation:
Maximum neighbour to the element mat[0][0] = 4 (Distance = 1)
Maximum neighbour to the element mat[0][1] = 5 (Distance = 1)
Maximum neighbour to the element mat[1][0] = 5 (Distance = 1)
Maximum neighbour to the element mat[1][1] = 5 (Distance = 0)
Input: mat[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, K = 2
Output: {{7, 8, 9}, {8, 9, 9}, {9, 9, 9}}
方法:想法是在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)