
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Count of Smaller or Equal Elements in Sorted Array in C++
We are given an array of integers. The goal is to find the count of elements of an array which are less than or equal to the given value K.
Input
Arr[]= { 1, 2, 3, 14, 50, 69, 90 } K=12
Output
Numbers smaller or equal to K: 3
Explanation
Numbers 1,2,3 is smaller or equal to 12.
Input
Arr[]= { 12, 13, 13, 13, 14, 50, 54, 100 } K=14
Output
Numbers smaller or equal to K: 5
Explanation
Numbers 12, 13, 14 are smaller or equal to 14.
Naive Approach
Approach used in the below program is as follows
We take the integer array Arr[] and K.
Function smallorEqual(int arr[],int k,int len) returns the count of elements of arr[] that are small or equal to K
Take the initial variable count as 0 for such numbers.
Traverse array of numbers using for loop. i=0 to i<len
Now for each number arr[i], if it is <=k, increment count.
At the end loop count will have a total number which satisfies the condition.
Return the count as result.
Example
#include <bits/stdc++.h> using namespace std; int smallorEqual(int arr[],int k,int len){ int count = 0; for (int i = 0; i < len; i++){ if(arr[i]<=k) { count++; } else { break; } } return count; } int main(){ int Arr[] = { 1,5,11,12,19,21,32,53,70,100 }; int K = 21; int Length= sizeof(Arr)/sizeof(Arr[0]); cout <<"Numbers smaller or equal to K: "<<smallorEqual(Arr,K,Length); return 0; }
Output
If we run the above code it will generate the following output −
Numbers smaller or equal to K: 6
Efficient Approach ( Using binary search )
Approach used in the below program is as follows
We take the integer array Arr[] and K.
Function binarySearch(int arr[],int k,int len) returns the count of elements of arr[] that are small or equal to K
Take indexes low=0, high=len-1 and mid=(low+high)/2;/p>
Take variable index=-1;
Using while loop, till low<=high
Check value of arr[mid]. If it is <= k. Then index=mid. New low=mid+1
Otherwise new high=mid-1.
At the end of the while loop index will index of last number<=k.
Return the index+1 as result because array indexing starts from 0 and all numbers from index 0 to index are less than k.
Example
#include <bits/stdc++.h> using namespace std; int binarySearch(int arr[],int k,int len){ int low = 0; int high = len -1; int mid = (high+low)/2; int index = -1; while(low <= high){ mid =( low + high ) / 2; if(arr[mid] <= k){ index = mid; low = mid+1; } else{ high=mid-1; } } return (index+1); } int main(){ int Arr[] = { 1,5,11,12,19,21,32,53,70,100 }; int K = 21; int Length= sizeof(Arr)/sizeof(Arr[0]); cout <<"Numbers smaller or equal to K: "<<binarySearch(Arr,K,Length); return 0; }
Output
If we run the above code it will generate the following output −
Numbers smaller or equal to K: 6