Given an array Arr[]. The task is to count the number of elements Arr[i] in the given array such that one or more smaller elements are present on the right side of the element Arr[i] in array.
Examples:
Input: Arr[] = { 3, 9, 4, 6, 7, 5 }
Output: 3
Numbers that counts are: 9, 6, 7
9 – As all numbers are present after 9 are smaller than 9,
6 – 5 is smaller element present after it,
7 – 5 is smaller element which is present after it.
Input: Arr[] = { 3, 2, 1, 2, 3, 4, 5 }
Output: 2
Approach:
Start traversing array from the last till first element of the array. While traversing maintain a min variable which stores the minimum element till now and a counter variable. Compare min variable with the current element. If min variable is smaller than current element Arr[i], increase the counter and if min is greater than Arr[i] then update the min.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int count_greater( int arr[], int n)
{
int min = INT_MAX;
int counter = 0;
for ( int i = n - 1; i >= 0; i--) {
if (arr[i] > min) {
counter++;
}
if (arr[i] <= min) {
min = arr[i];
}
}
return counter;
}
int main()
{
int arr[] = { 3, 2, 1, 2, 3, 4, 5 };
int n = sizeof (arr) / sizeof ( int );
cout << count_greater(arr, n) << endl;
return 0;
}
|
Java
class GFG
{
static int count_greater( int arr[], int n)
{
int min = Integer.MAX_VALUE;
int counter = 0 ;
for ( int i = n - 1 ; i >= 0 ; i--)
{
if (arr[i] > min)
{
counter++;
}
if (arr[i] <= min)
{
min = arr[i];
}
}
return counter;
}
public static void main(String[] args)
{
int arr[] = { 3 , 2 , 1 , 2 , 3 , 4 , 5 };
int n = arr.length;
System.out.println(count_greater(arr, n));
}
}
|
Python3
import sys
def count_greater(arr, n) :
min = sys.maxsize;
counter = 0 ;
for i in range (n - 1 , - 1 , - 1 ) :
if (arr[i] > min ) :
counter + = 1 ;
if (arr[i] < = min ) :
min = arr[i];
return counter;
if __name__ = = "__main__" :
arr = [ 3 , 2 , 1 , 2 , 3 , 4 , 5 ];
n = len (arr);
print (count_greater(arr, n));
|
C#
using System;
class GFG
{
static int count_greater( int []arr, int n)
{
int min = int .MaxValue;
int counter = 0;
for ( int i = n - 1; i >= 0; i--)
{
if (arr[i] > min)
{
counter++;
}
if (arr[i] <= min)
{
min = arr[i];
}
}
return counter;
}
static public void Main ()
{
int []arr = { 3, 2, 1, 2, 3, 4, 5 };
int n = arr.Length;
Console.Write(count_greater(arr, n));
}
}
|
Javascript
<script>
function count_greater(arr, n)
{
let min = Number.MAX_VALUE;
let counter = 0;
for (let i = n - 1; i >= 0; i--)
{
if (arr[i] > min)
{
counter++;
}
if (arr[i] <= min)
{
min = arr[i];
}
}
return counter;
}
let arr = [ 3, 2, 1, 2, 3, 4, 5 ];
let n = arr.length;
document.write(count_greater(arr, n) + "<br>" );
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)