# Count number of elements between two given elements in array

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)

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

 `// Program to count number of elements between ` `// two given elements. ` `#include ` `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); ` `    ``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``); ` `    ``} ` `     `  `    ``// Drvier 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)); ` ` `  `    ``} ` `} ` ` `  `// This article is contributed by vt_m. `

## PHP

 `= ``\$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. ` `?> `

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 contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up

Improved By : vt_m, jit_t

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.