最大值K,以使数组具有至少K个元素,这些元素在C ++中> = K

在这个问题上,我们得到了一个数组arr。我们的任务是创建一个程序来查找最大值K,以使数组中的至少K个元素在C ++中大于等于K。

问题描述

我们需要找到一个值K,该值满足以下条件:数组中有K个或更多元素大于或等于K。

让我们举个例子来了解这个问题,

输入:arr [] = {3,5,1,7,6,6,4,8}

输出:5

说明

数组中大于或等于5的元素:5、6、6、7、8。

解决方法

解决该问题的一种简单有效的方法是对数组进行排序,并从最后一个索引开始检查该元素后面的元素数是否大于元素本身。如果是,则返回该元素。

示例

#include <bits/stdc++.h>
using namespace std;
int CalcMaximumVal(int arr[], int N){
   sort(arr, arr + N);
   for(int i = (N - 1); i >= 0; i--){
      if(arr[i] <= (N - i) )
         return arr[i];
   }
}
int main(){
   int arr[] = {4,7,2,3,8};
   int N = sizeof(arr)/sizeof(arr[0]);
   cout<<"The maximum value K such that array has at-least K elements that are >= K is "<<CalcMaximumVal(arr, N);
   return 0;
}

输出结果

The maximum value K such that array has at-least K elements that are >= K
is 3