给定矩阵mat [] []以及两个整数X和Y ,任务是检查X和Y是否在给定矩阵的同一对角线上。
例子:
Input: mat[][]= {{1, 2}. {3, 4}}, X = 1, Y = 4
Output: Yes
Explanation:
Both X and Y lie on the same diagonal.
Input: mat[][]= {{1, 2}. {3, 4}}, X = 2, Y = 4
Output: No
方法:解决该问题的关键观察结果是,只有两个索引的总和或两个元素的索引的绝对差相等时,矩阵的两个元素才在同一对角线上。请按照以下步骤解决问题:
- 遍历矩阵并找到矩阵元素的索引。
- 检查元素是否在同一对角线上。
假设矩阵元素的索引为(P,Q)和(X,Y),则两个元素在同一对角线上的条件由以下方程式给出:
abs(P – Q) == abs(X – Y) or P + Q == X + Y
- 如果满足以上条件,则打印“是”。否则,打印“否”。
下面是上述方法的实现:
C++
// C++ program for
// the above approach
#include
using namespace std;
// Function to check if two
// integers are on the same
// diagonal of the matrix
void checkSameDiag(int li[6][5], int x,
int y, int m, int n)
{
// Storing indexes of x in I, J
int I = 0, J = 0;
// Storing Indexes of y in P, Q
int P = 0, Q = 0;
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if (li[i][j] == x)
{
I = i;
J = j;
}
if (li[i][j] == y)
{
P = i;
Q = j;
}
}
}
// Condition to check if the
// both the elements are in
// same diagonal of a matrix
if (abs(P - Q) == abs(I - J) ||
P + Q == I + J)
{
cout << "YES";
}
else
cout << "NO";
}
// Driver code
int main()
{
// Dimensions of Matrix
int m = 6;
int n = 5;
// Given Matrix
int li[6][5] = {{32, 94, 99, 26, 82},
{51, 69, 52, 63, 17},
{90, 36, 88, 55, 33},
{93, 42, 73, 39, 28},
{81, 31, 83, 53, 10},
{12, 29, 85, 80, 87}};
// Elements to be checked
int x = 42;
int y = 80;
// Function call
checkSameDiag(li, x, y, m, n);
return 0;
}
//This code is contributed by 29AjayKumar
Java
// Java implementation of the
// above approach
class GFG{
// Function to check if two
// integers are on the same
// diagonal of the matrix
static void checkSameDiag(int li[][], int x,
int y, int m, int n)
{
// Storing indexes of x in I, J
int I = 0, J = 0;
// Storing Indexes of y in P, Q
int P = 0, Q = 0;
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if (li[i][j] == x)
{
I = i;
J = j;
}
if (li[i][j] == y)
{
P = i;
Q = j;
}
}
}
// Condition to check if the
// both the elements are in
// same diagonal of a matrix
if (Math.abs(P - Q) == Math.abs(I - J) ||
P + Q == I + J)
{
System.out.println("YES");
}
else
System.out.println("NO");
}
// Driver Code
public static void main(String[] args)
{
// Dimensions of Matrix
int m = 6;
int n = 5;
// Given Matrix
int[][] li = { { 32, 94, 99, 26, 82 },
{ 51, 69, 52, 63, 17 },
{ 90, 36, 88, 55, 33 },
{ 93, 42, 73, 39, 28 },
{ 81, 31, 83, 53, 10 },
{ 12, 29, 85, 80, 87 } };
// Elements to be checked
int x = 42;
int y = 80;
// Function call
checkSameDiag(li, x, y, m, n);
}
}
// This code is contributed by Amit Katiyar
Python3
# Python3 implementation of the
# above approach
# Function to check if two
# integers are on the same
# diagonal of the matrix
def checkSameDiag(x, y):
# Storing indexes of x in I, J
# Storing Indexes of y in P, Q
for i in range(m):
for j in range(n):
if li[i][j] == x:
I, J = i, j
if li[i][j] == y:
P, Q = i, j
# Condition to check if the
# both the elements are in
# same diagonal of a matrix
if abs(P-Q) == abs(I-J) or P + Q == I + J:
print("YES")
else:
print("NO")
# Driver Code
if __name__ == "__main__":
# Dimensions of Matrix
m, n = 6, 5
# Given Matrix
li = [[32, 94, 99, 26, 82],
[51, 69, 52, 63, 17],
[90, 36, 88, 55, 33],
[93, 42, 73, 39, 28],
[81, 31, 83, 53, 10],
[12, 29, 85, 80, 87]]
# elements to be checked
x, y = 42, 80
# Function Call
checkSameDiag(x, y)
C#
// C# implementation of the
// above approach
using System;
class GFG{
// Function to check if two
// integers are on the same
// diagonal of the matrix
static void checkSameDiag(int [,]li, int x,
int y, int m, int n)
{
// Storing indexes of x in I, J
int I = 0, J = 0;
// Storing Indexes of y in P, Q
int P = 0, Q = 0;
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if (li[i, j] == x)
{
I = i;
J = j;
}
if (li[i, j] == y)
{
P = i;
Q = j;
}
}
}
// Condition to check if the
// both the elements are in
// same diagonal of a matrix
if (Math.Abs(P - Q) == Math.Abs(I - J) ||
P + Q == I + J)
{
Console.WriteLine("YES");
}
else
Console.WriteLine("NO");
}
// Driver Code
public static void Main(String[] args)
{
// Dimensions of Matrix
int m = 6;
int n = 5;
// Given Matrix
int [,]li = {{32, 94, 99, 26, 82},
{51, 69, 52, 63, 17},
{90, 36, 88, 55, 33},
{93, 42, 73, 39, 28},
{81, 31, 83, 53, 10},
{12, 29, 85, 80, 87}};
// Elements to be checked
int x = 42;
int y = 80;
// Function call
checkSameDiag(li, x, y, m, n);
}
}
// This code is contributed by 29AjayKumar
Javascript
输出:
YES
时间复杂度: O(N * M)
辅助空间: O(1)