Given an array arr of N integers, the task is to find the number of elements that satisfy the following condition:
If the element is X then there has to be exactly X number of elements in the array (excluding the number X) which are greater than or equal to X
Examples:
Input: arr[] = {1, 2, 3, 4}
Output: 1
Only element 2 satisfies the condition as
there are exactly 2 elements which are greater
than or equal to 2 (3, 4) except 2 itself.
Input: arr[] = {5, 5, 5, 5, 5}
Output: 0
Approach: The problem involves efficient searching for each arr[i] element the number of arr[j]’s (i != j) which are greater than or equal to arr[i].
- Sort the array in ascending order.
- For every element arr[i], using binary search get the count of all the elements that are greater than or equal to arr[i] except arr[i] itself.
- If the count is equal to arr[i] then increment the result.
- Print the value of the result in the end.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std;#define ll long longll int getCount(vector<ll int> v, int n){ // Sorting the vector sort((v).begin(), (v).end()); ll int cnt = 0; for (ll int i = 0; i < n; i++) { // Count of numbers which // are greater than v[i] ll int tmp = v.end() - 1 - upper_bound((v).begin(), (v).end(), v[i] - 1); if (tmp == v[i]) cnt++; } return cnt;}// Driver codeint main(){ ll int n; n = 4; vector<ll int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); cout << getCount(v, n); return 0;} |
Java
// Java implementation of the approachimport java.util.*;class GFG { static int getCount(int[] v, int n) { // Sorting the vector Arrays.sort(v); int cnt = 0; for (int i = 0; i < n; i++) { // Count of numbers which // are greater than v[i] int tmp = n - 1 - upperBound(v, n, v[i] - 1); if (tmp == v[i]) cnt++; } return cnt; } // Function to implement upper_bound() static int upperBound(int[] array, int length, int value) { int low = 0; int high = length; while (low < high) { final int mid = (low + high) / 2; if (value >= array[mid]) { low = mid + 1; } else { high = mid; } } return low; } // Driver Code public static void main(String[] args) { int n = 4; int[] v = { 1, 2, 3, 4 }; System.out.println(getCount(v, n)); }}// This code is contributed by// sanjeev2552 |
Python3
# Python3 implementation of the approachfrom bisect import bisect as upper_bounddef getCount(v, n): # Sorting the vector v = sorted(v) cnt = 0 for i in range(n): # Count of numbers which # are greater than v[i] tmp = n - 1 - upper_bound(v, v[i] - 1) if (tmp == v[i]): cnt += 1 return cnt# Driver codemain()n = 4v = []v.append(1)v.append(2)v.append(3)v.append(4)print(getCount(v, n))# This code is contributed by Mohit Kumar |
C#
// C# implementation of the approachusing System;class GFG { static int getCount(int[] v, int n) { // Sorting the vector Array.Sort(v); int cnt = 0; for (int i = 0; i < n; i++) { // Count of numbers which // are greater than v[i] int tmp = n - 1 - upperBound(v, n, v[i] - 1); if (tmp == v[i]) cnt++; } return cnt; } // Function to implement upper_bound() static int upperBound(int[] array, int length, int value) { int low = 0; int high = length; while (low < high) { int mid = (low + high) / 2; if (value >= array[mid]) { low = mid + 1; } else { high = mid; } } return low; } // Driver Code public static void Main(String[] args) { int n = 4; int[] v = { 1, 2, 3, 4 }; Console.WriteLine(getCount(v, n)); }}// This code is contributed by PrinciRaj1992 |
Javascript
<script>// JavaScript implementation of the approach function getCount(v,n) { // Sorting the vector v.sort(function(a,b){return a-b;}); let cnt = 0; for (let i = 0; i < n; i++) { // Count of numbers which // are greater than v[i] let tmp = n - 1 - upperBound(v, n, v[i] - 1); if (tmp == v[i]) cnt++; } return cnt; } // Function to implement upper_bound() function upperBound(array,length,value) { let low = 0; let high = length; while (low < high) { let mid = Math.floor((low + high) / 2); if (value >= array[mid]) { low = mid + 1; } else { high = mid; } } return low; } // Driver Code let n = 4; let v=[1, 2, 3, 4]; document.write(getCount(v, n));// This code is contributed by unknown2108</script> |
1
Complexity Analysis:
- Time Complexity: O(N*logN)
- Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
