Count number of elements between two given elements in array
Last Updated :
10 Oct, 2022
Given an unsorted array of n elements and also given two points num1 and num2. The task is to count number of elements occurs between the given points (excluding num1 and num2).
If there are multiple occurrences of num1 and num2, we need to consider leftmost occurrence of num1 and rightmost occurrence of num2.
Examples:
Input : arr[] = {3 5 7 6 4 9 12 4 8}
num1 = 5
num2 = 4
Output : 5
Number of elements between leftmost occurrence
of 5 and rightmost occurrence of 4 is five.
Input : arr[] = {4, 6, 8, 3, 6, 2, 8, 9, 4}
num1 = 4
num2 = 4
Output : 7
Input : arr[] = {4, 6, 8, 3, 6, 2, 8, 9, 4}
num1 = 4
num2 = 10
Output : 0
The solution should traverse array only once in all cases (when single or both elements are not present)
The idea is to traverse array from left and find first occurrence of num1. If we reach end, we return 0. Then we traverse from rightmost element and find num2. We traverse only till the point which is greater than index of num1. If we reach end, we return 0. If we found both elements, we return count using indexes of found elements.
Implementation:
CPP
// Program to count number of elements between
// two given elements.
#include <bits/stdc++.h>
using namespace std;
// Function to count number of elements
// occurs between the elements.
int getCount(int arr[], int n, int num1, int num2)
{
// Find num1
int i = 0;
for (i = 0; i < n; i++)
if (arr[i] == num1)
break;
// If num1 is not present or present at end
if (i >= n-1)
return 0;
// Find num2
int j;
for (j = n-1; j >= i+1; j--)
if (arr[j] == num2)
break;
// If num2 is not present
if (j == i)
return 0;
// return number of elements between
// the two elements.
return (j - i - 1);
}
// Driver Code
int main()
{
int arr[] = { 3, 5, 7, 6, 4, 9, 12, 4, 8 };
int n = sizeof(arr) / sizeof(arr[0]);
int num1 = 5, num2 = 4;
cout << getCount(arr, n, num1, num2);
return 0;
}
Java
// Program to count number of elements
// between two given elements.
import java.io.*;
class GFG
{
// Function to count number of elements
// occurs between the elements.
static int getCount(int arr[], int n,
int num1, int num2)
{
// Find num1
int i = 0;
for (i = 0; i < n; i++)
if (arr[i] == num1)
break;
// If num1 is not present
// or present at end
if (i >= n - 1)
return 0;
// Find num2
int j;
for (j = n - 1; j >= i + 1; j--)
if (arr[j] == num2)
break;
// If num2 is not present
if (j == i)
return 0;
// return number of elements
// between the two elements.
return (j - i - 1);
}
// Driver program
public static void main (String[] args)
{
int arr[] = { 3, 5, 7, 6, 4, 9, 12, 4, 8 };
int n = arr.length;
int num1 = 5, num2 = 4;
System.out.println( getCount(arr, n, num1, num2));
}
}
// This code is contributed by vt_m
Python3
# Python Program to count number of elements between
# two given elements.
# Function to count number of elements
# occurs between the elements.
def getCount(arr, n, num1, num2):
# Find num1
for i in range(0,n):
if (arr[i] == num1):
break
#If num1 is not present or present at end
if (i >= n-1):
return 0
# Find num2
for j in range(n-1, i+1, -1):
if (arr[j] == num2):
break
# If num2 is not present
if (j == i):
return 0
# return number of elements between
# the two elements.
return (j - i - 1)
# Driver Code
arr= [ 3, 5, 7, 6, 4, 9, 12, 4, 8 ]
n=len(arr)
num1 = 5
num2 = 4
print(getCount(arr, n, num1, num2))
# This code is contributed by SHARIQ_JMI
C#
// C# Program to count number of elements
// between two given elements.
using System;
class GFG {
// Function to count number of elements
// occurs between the elements.
static int getCount(int []arr, int n,
int num1, int num2)
{
// Find num1
int i = 0;
for (i = 0; i < n; i++)
if (arr[i] == num1)
break;
// If num1 is not present
// or present at end
if (i >= n - 1)
return 0;
// Find num2
int j;
for (j = n - 1; j >= i + 1; j--)
if (arr[j] == num2)
break;
// If num2 is not present
if (j == i)
return 0;
// return number of elements
// between the two elements.
return (j - i - 1);
}
// Driver Code
public static void Main ()
{
int []arr = {3, 5, 7, 6, 4, 9, 12, 4, 8};
int n = arr.Length;
int num1 = 5, num2 = 4;
Console.WriteLine(getCount(arr, n, num1, num2));
}
}
//
PHP
<?php
// Program to count number
// of elements between
// two given elements.
// Function to count
// number of elements
// occurs between the
// elements.
function getCount($arr, $n,
$num1, $num2)
{
// Find num1
$i = 0;
for ($i = 0; $i < $n; $i++)
if ($arr[$i] == $num1)
break;
// If num1 is not present
// or present at end
if ($i >= $n - 1)
return 0;
// Find num2
$j;
for ($j = $n - 1; $j >= $i + 1; $j--)
if ($arr[$j] == $num2)
break;
// If num2 is not present
if ($j == $i)
return 0;
// return number of elements
// betweenthe two elements.
return ($j - $i - 1);
}
// Driver Code
$arr = array(3, 5, 7, 6, 4, 9, 12, 4, 8);
$n = sizeof($arr);
$num1 = 5; $num2 = 4;
echo(getCount($arr, $n, $num1, $num2));
// This code is contributed by Ajit.
?>
JavaScript
<script>
// Program to count number of elements between
// two given elements.
// Function to count number of elements
// occurs between the elements.
function getCount( arr, n, num1, num2)
{
// Find num1
let i = 0;
for (i = 0; i < n; i++)
if (arr[i] == num1)
break;
// If num1 is not present or present at end
if (i >= n-1)
return 0;
// Find num2
let j;
for (j = n-1; j >= i+1; j--)
if (arr[j] == num2)
break;
// If num2 is not present
if (j == i)
return 0;
// return number of elements between
// the two elements.
return (j - i - 1);
}
// Driver program
let arr = [ 3, 5, 7, 6, 4, 9, 12, 4, 8 ];
let n = arr.length;
let num1 = 5, num2 = 4;
document.write(getCount(arr, n, num1, num2));
</script>
Time Complexity: O(n)
Auxiliary Space: O(1)
How to handle multiple queries?
For handling multiple queries, we can use hashing and store leftmost and rightmost indexes for every element present in array. Once we have stored these, we can answer all queries in O(1) time.
This article is contributed by Dharmendra kumar.
Similar Reads
Count of array elements which is smaller than both its adjacent elements Given an array arr[] of size N, the task is to find the number of valley points in the array. Valley Point: Any elements of the array is known as a valley point if it is smaller than both its adjacent elements, i.e. arr[i-1] > arr[i] < arr[i+1] . Examples: Input: arr[] = {3, 2, 5} Output: 1 Ex
4 min read
Count greater elements on the left side of every array element Given an array arr[] of distinct integers of size N, the task is to print the count of greater elements on the left side of each array element. Examples : Input: arr[] = {12, 1, 2, 3, 0, }Output: 0 1 1 1 4Explanation:For index 0, no greater element exists on the left side.For index 1, {12} is greate
7 min read
Count of array elements which are greater than all elements on its left Given an array arr[] of size n, the task is to count the number of array elements such that all the elements to its left are strictly smaller than it.Note: The first element of the array will be considered to be always satisfying the condition.Examples :Input: arr[] = [2, 4, 5, 6]Output: 4Explanatio
8 min read
Count of smaller or equal elements in sorted array Given a sorted array of size n. Find a number of elements that are less than or equal to a given element. Examples: Input : arr[] = {1, 2, 4, 5, 8, 10} key = 9 Output : 5 Elements less than or equal to 9 are 1, 2, 4, 5, 8 therefore result will be 5. Input : arr[] = {1, 2, 2, 2, 5, 7, 9} key = 2 Outp
15+ min read
Count of larger elements on right side of each element in an array Given an array arr[] consisting of N integers, the task is to count the number of greater elements on the right side of each array element. Examples: Input: arr[] = {3, 7, 1, 5, 9, 2} Output: {3, 1, 3, 1, 0, 0} Explanation: For arr[0], the elements greater than it on the right are {7, 5, 9}. For arr
15+ min read