20. Number of occurrence
The problem can be found at the following link: Question Link
My Approach
To deal with the constraints in this problem, I have use a binary search approach.
Implement a
lower boundfunction to find the first occurrence ofxin the sorted array.Implement an
upper boundfunction to find the first element greater thanx.Calculate the count of
xby subtracting the lower bound index from the upper bound index.
Explanation with Example
Consider the array: [2, 4, 4, 4, 6, 8, 9, 10] and the element x = 4.
lower_bound(arr, n, x)returns the index of the first occurrence of4, which is 1.upper_bound(arr, n, x)returns the index after the last occurrence of4, which is 4.
Therefore, the frequency of 4 in the array is 4 - 1 = 3.
Time and Auxiliary Space Complexity
Time Complexity :
O(log n), wherenis the size of the array. Binary search takes logarithmic time.Auxiliary Space Complexity :
O(1), as the extra space used is constant.
Code (C++)
class Solution{
public:
int lower_bound(int arr[], int n, int x) {
int l = 0, r = n - 1;
while(l < r) {
int m = (l + r) / 2;
if(x <= arr[m])
r = m;
else
l = m + 1;
}
return l;
}
int upper_bound(int arr[], int n, int x) {
int l = 0, r = n - 1;
while(l < r) {
int m = (l + r) / 2;
if(x >= arr[m])
l = m + 1;
else
r = m;
}
if(l < n && arr[l] <= x)
l++;
return l;
}
int count(int arr[], int n, int x) {
int start = lower_bound(arr, n, x);
if(arr[start] != x)
return 0;
int last = upper_bound(arr, n, x);
return last - start;
}
};Contribution and Support
For discussions, questions, or doubts related to this solution, please visit our discussion section. We welcome your input and aim to foster a collaborative learning environment.
If you find this solution helpful, consider supporting us by giving a ⭐ star to the getlost01/gfg-potd repository.
Last updated
Was this helpful?