Count number of elements between two given elements in array

15 Apr, 2021
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.  
CPP
Java
Python3
C#
PHP
Javascript
// 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 Codeint 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;}
// 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
# 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 Codearr= [ 3, 5, 7, 6, 4, 9, 12, 4, 8 ]n=len(arr)num1 = 5num2 = 4print(getCount(arr, n, num1, num2)) # This code is contributed by SHARIQ_JMI
// 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));     }} // This article is contributed by vt_m.
<?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.?>
<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>
Output: 
5
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. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
vt_m
jit_t
Akanksha_Rai
jana_sayantan
Arrays
Hash
Searching
Arrays
Searching
Hash
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Data Structures
Search, insert and delete in an unsorted array
Window Sliding Technique
Chocolate Distribution Problem
Move all negative numbers to beginning and positive to end with constant extra space
What is Hashing | A Complete Tutorial
Hashing | Set 1 (Introduction)
Internal Working of HashMap in Java
Longest Consecutive Subsequence
Count pairs with given sum