给定一个由n个整数组成的数组。我们可以在数组中添加k个其他整数,然后找到所得数组的中位数。我们可以选择要添加的任何k个值。
限制条件:
k < n
n + k is always odd.
例子 :
Input : arr[] = { 4, 7 }
k = 1
Output : 7
Explanation : One of the possible solutions
is to add 8 making the array [4, 7, 8], whose
median is 7
Input : arr[] = { 6, 1, 1, 1, 1 }
k = 2
Output : 1
Explanation : No matter what elements we add
to this array, the median will always be 1
我们首先以递增顺序对数组进行排序。由于k的值小于n且n + k始终为奇数,因此我们始终可以选择添加大于数组最大元素的k个元素,并且第(n + k)/ 2个元素始终为数组的中值。
C++
// CPP program to find median of an array when
// we are allowed to add additional K integers
// to it.
#include
using namespace std;
// Find median of array after adding k elements
void printMedian(int arr[], int n, int K)
{
// sorting the array in increasing order.
sort(arr, arr + n);
// printing the median of array.
// Since n + K is always odd and K < n,
// so median of array always lies in
// the range of n.
cout << arr[(n + K) / 2];
}
// driver function
int main()
{
int arr[] = { 5, 3, 2, 8 };
int k = 3;
int n = sizeof(arr) / sizeof(arr[0]);
printMedian(arr, n, k);
return 0;
}
Java
// Java program to find median of an array when
// we are allowed to add additional K integers
// to it.
import java.util.Arrays;
class GFG {
// Find median of array after adding k elements
static void printMedian(int arr[], int n, int K)
{
// sorting the array in increasing order.
Arrays.sort(arr);
// printing the median of array.
// Since n + K is always odd and K < n,
// so median of array always lies in
// the range of n.
System.out.print(arr[(n + K) / 2]);
}
//Driver code
public static void main (String[] args)
{
int arr[] = { 5, 3, 2, 8 };
int k = 3;
int n = arr.length;
printMedian(arr, n, k);
}
}
// This code is contributed by Anant Agarwal.
Python3
# Python3 code to find median of an
# array when we are allowed to add
# additional K integers to it.
# Find median of array after
# adding k elements
def printMedian (arr, n, K):
# sorting the array in
# increasing order.
arr.sort()
# printing the median of array.
# Since n + K is always odd
# and K < n, so median of
# array always lies in
# the range of n.
print( arr[int((n + K) / 2)])
# driver function
arr = [ 5, 3, 2, 8 ]
k = 3
n = len(arr)
printMedian(arr, n, k)
# This code is contributed by "Sharad_Bhardwaj".
C#
// C# program to find median of an array when
// we are allowed to add additional K integers
// to it.
using System;
class GFG
{
// Find median of array after adding k elements
static void printMedian(int []arr, int n, int K)
{
// sorting the array in increasing order.
Array.Sort(arr);
// printing the median of array.
// Since n + K is always odd and K < n,
// so median of array always lies in
// the range of n.
Console.Write(arr[(n + K) / 2]);
}
//Driver code
public static void Main ()
{
int []arr = { 5, 3, 2, 8 };
int k = 3;
int n = arr.Length;
printMedian(arr, n, k);
}
}
// This code is contributed by anant321.
PHP
输出 :
8