Given an array of integers, print histogram of array values. Examples:
Input : 0 11 2 13 5 12 8 11 12 9 Output : 13 | x 12 | x x x 11 | x x x x x 10 | x x x x x 9 | x x x x x x 8 | x x x x x x x 7 | x x x x x x x 6 | x x x x x x x 5 | x x x x x x x x 4 | x x x x x x x x 3 | x x x x x x x x 2 | x x x x x x x x x 1 | x x x x x x x x x 0 | x x x x x x x x x x --------------------------------------- 0 11 2 13 5 12 8 11 12 9 Input : 10 9 12 4 5 2 8 5 3 1 Output : 12 | x 11 | x 10 | x x 9 | x x x 8 | x x x x 7 | x x x x 6 | x x x x 5 | x x x x x x 4 | x x x x x x x 3 | x x x x x x x x 2 | x x x x x x x x x 1 | x x x x x x x x x x 0 | x x x x x x x x x x --------------------------------------- 10 9 12 4 5 2 8 5 3 1
The idea is to print the given histogram row by row. For every element, we check if it is greater than or equal to current row. If yes, put a ‘x’ for that element. Else we put a space.
CPP
// CPP program to make histogram of an array #include <bits/stdc++.h> using namespace std;
void printHistogram( int arr[], int n)
{ int maxEle = *max_element(arr, arr + n);
for ( int i = maxEle; i >= 0; i--) {
cout.width(2);
cout << right << i << " | " ;
for ( int j = 0; j < n; j++) {
// if array of element is greater
// then array it print x
if (arr[j] >= i)
cout << " x " ;
// else print blank spaces
else
cout << " " ;
}
cout << "\n" ;
}
// print last line denoted by ----
for ( int i = 0; i < n + 3; i++)
cout << "---" ;
cout << "\n" ;
cout << " " ;
for ( int i = 0; i < n; i++) {
cout.width(2); // width for a number
cout << right << arr[i] << " " ;
}
} // Driver code int main()
{ int arr[10] = { 10, 9, 12, 4, 5, 2,
8, 5, 3, 1 };
int n = sizeof (arr) / sizeof (arr[0]);
printHistogram(arr, n);
return 0;
} |
Java
// Java program to make histogram of an array import java.util.Arrays;
class Main {
static void printHistogram( int [] arr, int n) {
int maxEle = Arrays.stream(arr).max().getAsInt();
for ( int i = maxEle; i >= 0 ; i--) {
System.out.format( "%2d | " , i);
// if array of element is greater
// then array it print x
for ( int j = 0 ; j < n; j++) {
if (arr[j] >= i) {
System.out.print( " x " );
} else {
System.out.print( " " );
}
}
System.out.println();
}
for ( int i = 0 ; i < n + 3 ; i++) {
System.out.print( "---" );
}
System.out.println();
System.out.print( " " );
for ( int i = 0 ; i < n; i++) {
System.out.format( "%2d " , arr[i]);
}
}
// Driver code
public static void main(String[] args) {
int [] arr = { 10 , 9 , 12 , 4 , 5 , 2 , 8 , 5 , 3 , 1 };
int n = arr.length;
printHistogram(arr, n);
}
} |
Python3
def print_histogram(arr, n):
maxEle = max (arr)
for i in range (maxEle, - 1 , - 1 ):
print (f "{i:2d} | " , end = "")
# if array of element is greater
# then array it print x
for j in range (n):
if arr[j] > = i:
print ( " x " , end = "")
else :
print ( " " , end = "")
print ()
for i in range (n + 3 ):
print ( "---" , end = "")
print ()
print ( " " , end = "")
for i in range (n):
print (f "{arr[i]:2d} " , end = "")
print ()
# Driver code
arr = [ 10 , 9 , 12 , 4 , 5 , 2 , 8 , 5 , 3 , 1 ]
n = len (arr)
print_histogram(arr, n) |
C#
using System;
using System.Collections.Generic;
using System.Linq;
class Gfg
{ static void PrintHistogram( int [] arr, int n)
{
int maxEle = arr.Max();
for ( int i = maxEle; i >= 0; i--)
{
Console.Write(i.ToString().PadLeft(2) + " | " );
// if array of element is greater
// then array it print x
for ( int j = 0; j < n; j++)
{
if (arr[j] >= i)
Console.Write( " x " );
else
Console.Write( " " );
}
Console.WriteLine();
}
for ( int i = 0; i < n + 3; i++)
Console.Write( "---" );
Console.WriteLine();
Console.Write( " " );
for ( int i = 0; i < n; i++)
{
Console.Write(arr[i].ToString().PadLeft(2) + " " );
}
}
static void Main( string [] args)
{
int [] arr = { 10, 9, 12, 4, 5, 2, 8, 5, 3, 1 };
int n = arr.Length;
PrintHistogram(arr, n);
}
} |
Javascript
// JS program to make histogram of an array function printHistogram(arr) {
let n = arr.length;
let maxEle = Math.max(...arr);
for (let i = maxEle; i >= 0; i--) {
process.stdout.write(i.toString().padStart(2, ' ' ) + " | " );
for (let j = 0; j < n; j++) {
// if array of element is greater
// then array it print x
if (arr[j] >= i)
process.stdout.write( " x " );
// else print blank spaces
else
process.stdout.write( " " );
}
console.log();
}
// print last line denoted by ----
for (let i = 0; i < n + 3; i++)
process.stdout.write( "---" );
console.log();
process.stdout.write( " " );
for (let i = 0; i < n; i++) {
process.stdout.write(arr[i].toString().padStart(2, ' ' ) + " " );
}
} // Driver code let arr = [10, 9, 12, 4, 5, 2, 8, 5, 3, 1]; printHistogram(arr); |
Output:
12 | x 11 | x 10 | x x 9 | x x x 8 | x x x x 7 | x x x x 6 | x x x x 5 | x x x x x x 4 | x x x x x x x 3 | x x x x x x x x 2 | x x x x x x x x x 1 | x x x x x x x x x x 0 | x x x x x x x x x x --------------------------------------- 10 9 12 4 5 2 8 5 3 1
Time complexity: O(N*maxEle) where N is size of given array and maxEle is maximum element in the array
Auxiliary space: O(1)