Program to print the Diagonals of a Matrix in O(N) time
Last Updated :
12 Sep, 2022
Given a 2D square matrix, the task is to print the Principal and Secondary diagonals of this matrix in O(N) time complexity. For O(N2) time, please refer this article.
Examples:
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
Approach:
1.Consider the following 4 X 4 input matrix.
A00 A01 A02 A03
A10 A11 A12 A13
A20 A21 A22 A23
A30 A31 A32 A33
2.The primary diagonal is formed by the elements A00, A11, A22, A33.
Condition for Principal Diagonal:
The row-column condition is row = column.
3.The secondary diagonal is formed by the elements A03, A12, A21, A30.
Condition for Secondary Diagonal:
The row-column condition is row = numberOfRows - column - 1.
In this method, we use one loop i.e. a loop to find the diagonal elements as per the below formula:
principal diagonal = matrix[i][i];
secondary diagonal = matrix[i][n - i - 1];
where 0 <= i <= n
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
const int MAX = 100;
void printPrincipalDiagonal( int mat[][MAX], int n)
{
cout << "Principal Diagonal: " ;
for ( int i = 0; i < n; i++) {
cout << mat[i][i] << ", " ;
}
cout << endl;
}
void printSecondaryDiagonal( int mat[][MAX], int n)
{
cout << "Secondary Diagonal: " ;
for ( int i = 0; i < n; i++) {
cout << mat[i][n - i - 1] << ", " ;
}
cout << endl;
}
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
class GFG
{
static final int MAX = 100 ;
static void printPrincipalDiagonal( int mat[][], int n)
{
System.out.print( "Principal Diagonal: " );
for ( int i = 0 ; i < n; i++)
{
System.out.print(mat[i][i] + ", " );
}
System.out.println();
}
static void printSecondaryDiagonal( int mat[][], int n)
{
System.out.print( "Secondary Diagonal: " );
for ( int i = 0 ; i < n; i++)
{
System.out.print(mat[i][n - i - 1 ] + ", " );
}
System.out.println();
}
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);
}
}
|
Python3
MAX = 100 ;
def printPrincipalDiagonal(mat, n):
print ( "Principal Diagonal: " , end = "");
for i in range (n):
print (mat[i][i], end = ", " );
print ();
def printSecondaryDiagonal(mat, n):
print ( "Secondary Diagonal: " , end = "");
for i in range (n):
print (mat[i][n - i - 1 ], end = ", " );
print ();
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);
|
C#
using System;
class GFG
{
static void printPrincipalDiagonal( int [,]mat, int n)
{
Console.Write( "Principal Diagonal: " );
for ( int i = 0; i < n; i++)
{
Console.Write(mat[i, i] + ", " );
}
Console.WriteLine();
}
static void printSecondaryDiagonal( int [,]mat, int n)
{
Console.Write( "Secondary Diagonal: " );
for ( int i = 0; i < n; i++)
{
Console.Write(mat[i, n - i - 1] + ", " );
}
Console.WriteLine();
}
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);
}
}
|
Javascript
<script>
let MAX = 100;
function printPrincipalDiagonal(mat,n)
{
document.write( "Principal Diagonal: " );
for (let i = 0; i < n; i++)
{
document.write(mat[i][i] + ", " );
}
document.write( "<br>" );
}
function printSecondaryDiagonal(mat,n)
{
document.write( "Secondary Diagonal: " );
for (let i = 0; i < n; i++)
{
document.write(mat[i][n - i - 1] + ", " );
}
document.write( "<br>" );
}
let n = 4;
let a = [[1, 2, 3, 4 ],
[ 5, 6, 7, 8 ],
[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ]];
printPrincipalDiagonal(a, n);
printSecondaryDiagonal(a, n);
</script>
|
Output:
Principal Diagonal: 1, 6, 3, 8,
Secondary Diagonal: 4, 7, 2, 5,
Time complexity: O(n) for given n
Auxiliary space: O(1) as it is using constant space
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...