在 O(N) 时间内打印矩阵对角线的程序
给定一个二维方阵,任务是以 O(N) 的时间复杂度打印该矩阵的主对角线和辅助对角线。对于 O(N 2 ) 时间,请参考这篇文章。
例子:
Input:
4
1 2 3 4
4 3 2 1
7 8 9 6
6 5 4 3
Output:
Principal Diagonal: 1, 3, 9, 3
Secondary Diagonal: 4, 2, 8, 6
Input:
3
1 1 1
1 1 1
1 1 1
Output:
Principal Diagonal: 1, 1, 1
Secondary Diagonal: 1, 1, 1
方法:
1. 考虑以下 4 X 4 输入矩阵。
A00 A01 A02 A03
A10 A11 A12 A13
A20 A21 A22 A23
A30 A31 A32 A33
2.主对角线由元素A00、A11、A22、A33组成。
主对角线的条件:
The row-column condition is row = column.
3.次对角线由元素A03、A12、A21、A30组成。
次对角线的条件:
The row-column condition is row = numberOfRows - column - 1.
在这种方法中,我们使用一个循环,即一个循环,按照以下公式查找对角线元素:
principal diagonal = matrix[i][i];
secondary diagonal = matrix[i][n - i - 1];
where 0 <= i <= n
下面是上述方法的实现:
C++
// C++ Program to print the Diagonals of a Matrix
#include
using namespace std;
const int MAX = 100;
// Function to print the Principal Diagonal
void printPrincipalDiagonal(int mat[][MAX], int n)
{
cout << "Principal Diagonal: ";
for (int i = 0; i < n; i++) {
// Condition for principal diagonal
cout << mat[i][i] << ", ";
}
cout << endl;
}
// Function to print the Secondary Diagonal
void printSecondaryDiagonal(int mat[][MAX], int n)
{
cout << "Secondary Diagonal: ";
for (int i = 0; i < n; i++) {
// Condition for secondary diagonal
cout << mat[i][n - i - 1] << ", ";
}
cout << endl;
}
// Driver code
int main()
{
int n = 4;
int a[][MAX] = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 } };
printPrincipalDiagonal(a, n);
printSecondaryDiagonal(a, n);
return 0;
}
Java
// Java Program to print the Diagonals of a Matrix
class GFG
{
static final int MAX = 100;
// Function to print the Principal Diagonal
static void printPrincipalDiagonal(int mat[][], int n)
{
System.out.print("Principal Diagonal: ");
for (int i = 0; i < n; i++)
{
// Condition for principal diagonal
System.out.print(mat[i][i] + ", ");
}
System.out.println();
}
// Function to print the Secondary Diagonal
static void printSecondaryDiagonal(int mat[][], int n)
{
System.out.print("Secondary Diagonal: ");
for (int i = 0; i < n; i++)
{
// Condition for secondary diagonal
System.out.print(mat[i][n - i - 1] + ", ");
}
System.out.println();
}
// Driver code
public static void main (String[] args)
{
int n = 4;
int a[][] = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 } };
printPrincipalDiagonal(a, n);
printSecondaryDiagonal(a, n);
}
}
// This code is contributed by AnkitRai01
Python3
# Python Program to print the Diagonals of a Matrix
MAX = 100;
# Function to print the Principal Diagonal
def printPrincipalDiagonal(mat, n):
print("Principal Diagonal: ", end = "");
for i in range(n):
# Condition for principal diagonal
print(mat[i][i], end= ", ");
print();
# Function to print the Secondary Diagonal
def printSecondaryDiagonal(mat, n):
print("Secondary Diagonal: ", end = "");
for i in range(n):
# Condition for secondary diagonal
print(mat[i][n - i - 1], end = ", ");
print();
# Driver code
if __name__ == '__main__':
n = 4;
a = [[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ],
[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ]];
printPrincipalDiagonal(a, n);
printSecondaryDiagonal(a, n);
# This code is contributed by PrinciRaj1992
C#
// C# Program to print the Diagonals of a Matrix
using System;
class GFG
{
// Function to print the Principal Diagonal
static void printPrincipalDiagonal(int [,]mat, int n)
{
Console.Write("Principal Diagonal: ");
for (int i = 0; i < n; i++)
{
// Condition for principal diagonal
Console.Write(mat[i, i] + ", ");
}
Console.WriteLine();
}
// Function to print the Secondary Diagonal
static void printSecondaryDiagonal(int [,]mat, int n)
{
Console.Write("Secondary Diagonal: ");
for (int i = 0; i < n; i++)
{
// Condition for secondary diagonal
Console.Write(mat[i, n - i - 1] + ", ");
}
Console.WriteLine();
}
// Driver code
public static void Main()
{
int n = 4;
int [,]a = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 } };
printPrincipalDiagonal(a, n);
printSecondaryDiagonal(a, n);
}
}
// This code is contributed by AnkitRai01
Javascript
输出:
Principal Diagonal: 1, 6, 3, 8,
Secondary Diagonal: 4, 7, 2, 5,
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。