Open In App

Count number of elements between two given elements in array

Improve
Improve
Like Article
Like
Save
Share
Report

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





Java





Python3





C#





PHP





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>


Output

5

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.  



Last Updated : 10 Oct, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads