Find the number of elements greater than k in a sorted array

Hello Everyone,

Given a sorted array arr[] of integers and an integer k, the task is to find the count of elements in the array which are greater than k. Note that k may or may not be present in the array.

Examples:

Input: arr[] = {2, 3, 5, 6, 6, 9}, k = 6
Output: 1

Input: arr[] = {1, 1, 2, 5, 5, 7}, k = 8
Output: 0

Recommended: Please try your approach on {IDE} first, before moving on to the solution.
Approach: The idea is to perform binary search and find the number of elements greater than k.

Below is the implementation of the above approach:

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;

// Function to return the count of elements
// from the array which are greater than k
int countGreater(int arr[], int n, int k)
{
int l = 0;
int r = n - 1;

// Stores the index of the left most element
// from the array which is greater than k
int leftGreater = n;

// Finds number of elements greater than k
while (l <= r) {
    int m = l + (r - l) / 2;

    // If mid element is greater than
    // k update leftGreater and r
    if (arr[m] > k) {
        leftGreater = m;
        r = m - 1;
    }

    // If mid element is less than
    // or equal to k update l
    else
        l = m + 1;
}

// Return the count of elements greater than k
return (n - leftGreater);

}

// Driver code
int main()
{
int arr[] = { 3, 3, 4, 7, 7, 7, 11, 13, 13 };
int n = sizeof(arr) / sizeof(arr[0]);

int k = 7;

cout << countGreater(arr, n, k);

return 0;

}
Output:
3
Time Complexity: O(log(n)) where n is the number of elements in the array.