给定一个包含N 个元素的数组arr[]和一个整数K ,任务是找到选择整数X的方法数,使得数组中正好有K 个元素大于X 。
例子:
Input: arr[] = {1, 3, 4, 6, 8}, K = 2
Output: 2
X can be chosen as 4 or 5
Input: arr[] = {1, 1, 1}, K = 2
Output: 0
No matter what integer you choose as X, it’ll never have exactly 2 elements greater than it in the given array.
方法:
我们计算数组中不同元素的总数。如果不同元素的计数小于或等于 k,则可能有 0 个排列。否则计数等于不同元素的数量减去 k。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to returns the required count of integers
int countWays(int n, int arr[], int k)
{
if (k <= 0 || k >= n)
return 0;
unordered_set s(arr, arr+n);
if (s.size() <= k)
return 0;
// Return the required count
return s.size() - k;
}
// Driver code
int main()
{
int arr[] = { 100, 200, 400, 50 };
int k = 3;
int n = sizeof(arr) / sizeof(arr[0]);
cout << countWays(n, arr, k);
}
Java
// Java implementation of the approach
import java.util.*;
class GFG
{
// Function to returns the
// required count of integers
static int countWays(int n, int arr[], int k)
{
if (k <= 0 || k >= n)
return 0;
Set s = new HashSet();
for(int i = 0; i < n; i++)
s.add(arr[i]);
if (s.size() <= k)
return 0;
// Return the required count
return s.size() - k;
}
// Driver code
public static void main(String args[])
{
int arr[] = { 100, 200, 400, 50 };
int k = 3;
int n = arr.length;
System.out.println(countWays(n, arr, k));
}
}
// This code id contributed by
// Surendra_Gangwar
Python3
# Python 3 implementation of the approach
# Function to returns the required count of integers
def countWays(n, arr, k) :
if (k <= 0 or k >= n) :
return 0
s = set()
for element in arr :
s.add(element)
if (len(s) <= k) :
return 0;
# Return the required count
return len(s) - k;
# Driver code
if __name__ == "__main__" :
arr = [ 100, 200, 400, 50 ]
k = 3;
n = len(arr) ;
print(countWays(n, arr, k))
# This code is contributed by Ryuga
C#
// C# implementation of the approach
using System;
using System.Collections.Generic;
class GFG
{
// Function to returns the
// required count of integers
static int countWays(int n, int []arr, int k)
{
if (k <= 0 || k >= n)
return 0;
HashSet s = new HashSet();
for(int i = 0; i < n; i++)
s.Add(arr[i]);
if (s.Count <= k)
return 0;
// Return the required count
return s.Count - k;
}
// Driver code
public static void Main(String []args)
{
int []arr = { 100, 200, 400, 50 };
int k = 3;
int n = arr.Length;
Console.WriteLine(countWays(n, arr, k));
}
}
// This code is contributed by Rajput-Ji
PHP
= $n)
return 0;
$s = array();
foreach ($arr as $value)
array_push($s, $value);
$s = array_unique($s);
if (count($s) <= $k)
return 0;
// Return the required count
return count($s) - $k;
}
// Driver code
$arr = array(100, 200, 400, 50);
$k = 3;
$n = count($arr);
print(countWays($n, $arr, $k));
// This code is contributed by mits
?>
Javascript
输出:
1
时间复杂度: O(N * log(N))
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。