Maximum value K such that array has at-least K elements that are >= K
Last Updated :
08 Mar, 2023
Given an array of positive integers, find maximum possible value K such that the array has at-least K elements that are greater than or equal to K. The array is unsorted and may contain duplicate values.
Examples :
Input: [2, 3, 4, 5, 6, 7]
Output: 4
Explanation : 4 elements [4, 5, 6, 7]
are greater than equal to 4
Input: [1, 2, 3, 4]
Output: 2
Explanation : 3 elements [2, 3, 4] are
greater than equal to 2
Input: [4, 7, 2, 3, 8]
Output: 3
Explanation : 4 elements [4, 7, 3, 8]
are greater than equal to 3
Input: [6, 7, 9, 8, 10]
Output: 5
Explanation : All 5 elements are greater
than equal to 5
Expected time complexity : O(n)
Method 1 [Simple : O(n2) time] :
Let size of input array be n. Let us consider following important observations.
- The maximum possible value of result can be n. We get the maximum possible value when all elements are greater than or equal to n. For example, if input array is {10, 20, 30}, n is 3. The value of result can’t be greater than 3.
- The minimum possible value would be 1. An example case when get this output is, when all elements are 1.
So we can run a loop from n to 1 and count greater elements for every value.
C++
#include <iostream>
using namespace std;
int findMaximumNum(unsigned int arr[], int n)
{
for ( int i = n; i >= 1; i--)
{
int count = 0;
for ( int j=0; j<n; j++)
if (i <= arr[j])
count++;
if (count >= i)
return i;
}
return 1;
}
int main()
{
unsigned int arr[] = {1, 2, 3, 8, 10 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << findMaximumNum(arr, n);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int findMaximumNum( int arr[],
int n)
{
for ( int i = n; i >= 1 ; i--)
{
int count = 0 ;
for ( int j = 0 ; j < n; j++)
if (i <= arr[j])
count++;
if (count >= i)
return i;
}
return 1 ;
}
public static void main (String[] args)
{
int arr[] = { 1 , 2 , 3 , 8 , 10 };
int n = arr.length;
System.out.println(findMaximumNum(arr, n));
}
}
|
Python3
def findMaximumNum(arr, n):
i = n
while (i > = 1 ):
count = 0
for j in range ( 0 ,n, 1 ):
if (i < = arr[j]):
count + = 1
if (count > = i):
return i
i - = 1
return 1
if __name__ = = '__main__' :
arr = [ 1 , 2 , 3 , 8 , 10 ]
n = len (arr)
print (findMaximumNum(arr, n))
|
C#
using System;
class GFG
{
static int findMaximumNum( int []arr,
int n)
{
for ( int i = n; i >= 1; i--)
{
int count = 0;
for ( int j = 0; j < n; j++)
if (i <= arr[j])
count++;
if (count >= i)
return i;
}
return 1;
}
static public void Main ()
{
int []arr = {1, 2, 3, 8, 10 };
int n = arr.Length;
Console.WriteLine(findMaximumNum(arr, n));
}
}
|
PHP
<?php
function findMaximumNum( $arr , $n )
{
for ( $i = $n ; $i >= 1; $i --)
{
$count = 0;
for ( $j = 0; $j < $n ; $j ++)
if ( $i <= $arr [ $j ])
$count ++;
if ( $count >= $i )
return $i ;
}
return 1;
}
$arr = array (1, 2, 3, 8, 10);
$n = sizeof( $arr );
echo findMaximumNum( $arr , $n );
?>
|
Javascript
<script>
function findMaximumNum(arr, n)
{
for (let i = n; i >= 1; i--)
{
let count = 0;
for (let j = 0; j < n; j++)
if (i <= arr[j])
count++;
if (count >= i)
return i;
}
return 1;
}
let arr = [1, 2, 3, 8, 10 ];
let n = arr.length;
document.write(findMaximumNum(arr, n));
</script>
|
Time Complexity : O(N2) ,here N is size of array.
Space Complexity : O(1) ,since no extra space required.
Method 2 [Efficient : O(n) time and O(n) extra space]
- The idea is to construct auxiliary array of size n + 1, and use that array to find count of greater elements in input array. Let the auxiliary array be freq[]. We initialize all elements of this array as 0.
- We process all input elements.
- If an element arr[i] is less than n, then we increment its frequency, i.e., we do freq[arr[i]]++.
- Else we increment freq[n].
- After step 2 we have two things.
- Frequencies of elements for elements smaller than n stored in freq[0..n-1].
- Count of elements greater than n stored in freq[n].
Finally, we process the freq[] array backwards to find the output by keeping sum of the values processed so far.
Below is implementation of above idea.
C++
#include <bits/stdc++.h>
using namespace std;
int findMaximumNum(unsigned int arr[], int n)
{
vector< int > freq(n+1, 0);
for ( int i = 0; i < n; i++)
{
if (arr[i] < n)
freq[arr[i]]++;
else
freq[n]++;
}
int sum = 0;
for ( int i = n; i > 0; i--)
{
sum += freq[i];
if (sum >= i)
return i;
}
}
int main()
{
unsigned int arr[] = {1, 2, 3, 8, 10 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << findMaximumNum(arr, n);
return 0;
}
|
Java
import java.util.Vector;
class GFG {
static int findMaximumNum( int arr[], int n) {
int [] freq= new int [n+ 1 ];
for ( int i = 0 ; i < n + 1 ; i++) {
freq[i] = 0 ;
}
for ( int i = 0 ; i < n; i++) {
if (arr[i] < n)
{
freq[arr[i]]++;
}
else {
freq[n]++;
}
}
int sum = 0 ;
for ( int i = n; i > 0 ; i--) {
sum += freq[i];
if (sum >= i) {
return i;
}
}
return 0 ;
}
public static void main(String[] args) {
int arr[] = { 1 , 2 , 3 , 8 , 10 };
int n = arr.length;
System.out.println(findMaximumNum(arr, n));
}
}
|
Python3
def findMaximumNum(arr, n):
freq = [ 0 for i in range (n + 1 )]
for i in range (n):
if (arr[i] < n):
freq[arr[i]] + = 1
else :
freq[n] + = 1
sum = 0
for i in range (n, 0 , - 1 ):
sum + = freq[i]
if ( sum > = i):
return i
arr = [ 1 , 2 , 3 , 8 , 10 ]
n = len (arr)
print (findMaximumNum(arr, n))
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static int findMaximumNum( int []arr, int n)
{
List< int > freq = new List< int >();
for ( int i = 0; i < n + 1; i++)
{
freq.Insert(i, 0);
}
for ( int i = 0; i < n; i++)
{
if (arr[i] < n)
{
freq.Insert(arr[i], freq[arr[i]] + 1);
}
else
{
freq.Insert(n, freq[n] + 1);
}
}
int sum = 0;
for ( int i = n; i > 0; i--)
{
sum += freq[i];
if (sum >= i)
{
return i;
}
}
return 0;
}
public static void Main()
{
int []arr = {1, 2, 3, 8, 10};
int n = arr.Length;
Console.WriteLine(findMaximumNum(arr, n));
}
}
|
Javascript
<script>
function findMaximumNum(arr, n)
{
let freq = new Array(n + 1).fill(0);
for (let i = 0; i < n; i++) {
if (arr[i] < n)
freq[arr[i]]++;
else
freq[n]++;
}
let sum = 0;
for (let i = n; i > 0; i--) {
sum += freq[i];
if (sum >= i)
return i;
}
}
let arr = [1, 2, 3, 8, 10];
let n = arr.length;
document.write(findMaximumNum(arr, n));
</script>
|
Similar Reads
Find K for every Array element such that at least K prefixes are ≥ K
Given an array arr[] consisting of N non-negative integers, the task is to find an integer K for every index such that at least K integers in the array till that index are greater or equal to K. Note: Consider 1-based indexing Examples: Input: arr[] = {3, 0, 6, 1, 5} Output: K = {1, 1, 2, 2, 3} Expl
7 min read
Maximum in array which is at-least twice of other elements
Given an array of integers of length n. Our task is to return the index of the max element if the it is at least twice as much as every other number in the array. If the max element does not satisfy the condition return -1. Examples: Input : arr = {3, 6, 1, 0} Output : 1 Here, 6 is the largest integ
7 min read
Find a number K such that Array contains at least K numbers greater than or equal to K
Given an array arr[] of non-negative integers of size N, the task is to find an integer H such that at least K integers in the array are greater or equal to K.Examples: Input: arr[] = [3, 0, 6, 1, 5] Output: 3 Explanation: There are 3 number greater than or equal to 3 in the array i.e. 3, 6 and 5.In
4 min read
Find X such that most Array elements are of form (X + p*K)
Given an array arr[] and a number K, the task is to find a value X such that maximum number of array elements can be expressed in the form (X + p*K). Note: If there are multiple possible values of X, print the minimum among them. Examples: Input: arr[] = {1, 3, 5, 2, 4, 6}, k = 2Output: 1Explanation
8 min read
Reduce the array such that each element appears at most K times
Given a sorted array arr of size N, the task is to reduce the array such that each element can appear at most K times.Examples: Input: arr[] = {1, 2, 2, 2, 3}, K = 2 Output: {1, 2, 2, 3} Explanation: Remove 2 once, as it occurs more than 2 times.Input: arr[] = {3, 3, 3}, K = 1 Output: {3} Explanatio
10 min read
Number of ways to change the Array such that largest element is LCM of array
Given an array arr[] , the task is to count the number of the unique arrays can be formed by updating the elements of the given array to any element in the range [1, arr[i]] such that the Least common multiple of the updated array is equal to the maximum element. Examples: Input: arr[] = {6, 3} Outp
15+ min read
Find a number K such that exactly K array elements are greater than or equal to K
Given an array a[] of size N, which contains only non-negative elements, the task is to find any integer K for which there are exactly K array elements that are greater than or equal to K. If no such K exists, then print -1. Examples: Input: a[] = {7, 8, 9, 0, 0, 1}Output: 3Explanation:Since 3 is le
10 min read
Maximise K that can be reduced from Array to make all elements equal
Given an array arr[] of size N, the task is to make all elements equal by applying the operation given below any number of times (possibly zero) to any of the elements in the given array. Select an element in the array.Reduce it by a positive integer K. Among all such positive k's, print the maximum
6 min read
Maximize Kth largest element after splitting the given Array at most C times
Given an array arr[] and two positive integers K and C, the task is to maximize the Kth maximum element obtained after splitting an array element arr[] into two parts(not necessarily an integer) C number of times. Print -1 if there doesn't exist Kth maximum element. Note: It is compulsory to do spli
7 min read
Smallest subarray such that all elements are greater than K
Given an array of N integers and a number K, the task is to find the length of the smallest subarray in which all the elements are greater than K. If there is no such subarray possible, then print -1. Examples: Input: a[] = {3, 4, 5, 6, 7, 2, 10, 11}, K = 5 Output: 1 The subarray is {10} Input: a[]
4 min read