# 算法题：选择k个数组元素，使最大值和最小值之差最小

2021年3月13日16:39:31 发表评论 752 次浏览

## 本文概述

``````Input : arr[] = {10, 100, 300, 200, 1000, 20, 30}
k = 3
Output : 20
20 is the minimum possible difference between any
maximum and minimum of any k numbers.
Given k = 3, we get the result 20 by selecting
integers {10, 20, 30}.
max(10, 20, 30) - max(10, 20, 30) = 30 - 10 = 20.

Input : arr[] = {1, 2, 3, 4, 10, 20, 30, 40, 100, 200}.
k = 4
Output : 3``````

## 推荐：请在"实践首先, 在继续解决方案之前。

1. 排序数组。
2. 计算每组k个连续整数的最大值(k个数)-最小值(k个数)。
3. 返回在步骤2中获得的所有值的最小值。

## C ++

``````// C++ program to find minimum difference of maximum
// and minimum of K number.
#include<bits/stdc++.h>
using namespace std;

// Return minimum difference of maximum and minimum
// of k elements of arr[0..n-1].
int minDiff( int arr[], int n, int k)
{
int result = INT_MAX;

// Sorting the array.
sort(arr, arr + n);

// Find minimum value among all K size subarray.
for ( int i=0; i<=n-k; i++)
result = min(result, arr[i+k-1] - arr[i]);

return result;
}

// Driven Program
int main()
{
int arr[] = {10, 100, 300, 200, 1000, 20, 30};
int n = sizeof (arr)/ sizeof (arr[0]);
int k = 3;

cout << minDiff(arr, n, k) << endl;
return 0;
}``````

## Java

``````// Java program to find minimum difference
// of maximum and minimum of K number.
import java.util.*;

class GFG {

// Return minimum difference of
// maximum and minimum of k
// elements of arr[0..n-1].
static int minDiff( int arr[], int n, int k) {
int result = Integer.MAX_VALUE;

// Sorting the array.
Arrays.sort(arr);

// Find minimum value among
// all K size subarray.
for ( int i = 0 ; i <= n - k; i++)
result = Math.min(result, arr[i + k - 1 ] - arr[i]);

return result;
}

// Driver code
public static void main(String[] args) {
int arr[] = { 10 , 100 , 300 , 200 , 1000 , 20 , 30 };
int n = arr.length;
int k = 3 ;

System.out.println(minDiff(arr, n, k));
}
}

// This code is contributed by Anant Agarwal.``````

## Python3

``````# Python program to find minimum
# difference of maximum
# and minimum of K number.

# Return minimum difference
# of maximum and minimum
# of k elements of arr[0..n-1].
def minDiff(arr, n, k):
result = + 2147483647

# Sorting the array.
arr.sort()

# Find minimum value among
# all K size subarray.
for i in range (n - k + 1 ):
result = int ( min (result, arr[i + k - 1 ] - arr[i]))

return result

# Driver code

arr = [ 10 , 100 , 300 , 200 , 1000 , 20 , 30 ]
n = len (arr)
k = 3

print (minDiff(arr, n, k))

# This code is contributed
# by Anant Agarwal.``````

## C#

``````// C# program to find minimum
// difference of maximum and
// minimum of K number.
using System;

class GFG {

// Return minimum difference of
// maximum and minimum of k
// elements of arr[0..n - 1].
static int minDiff( int []arr, int n, int k)
{
int result = int .MaxValue;

// Sorting the array.
Array.Sort(arr);

// Find minimum value among
// all K size subarray.
for ( int i = 0; i <= n - k; i++)
result = Math.Min(result, arr[i + k - 1] - arr[i]);

return result;
}

// Driver code
public static void Main() {
int []arr = {10, 100, 300, 200, 1000, 20, 30};
int n = arr.Length;
int k = 3;

Console.WriteLine(minDiff(arr, n, k));
}
}

// This code is contributed by vt_m.``````

## 的PHP

``````<?php
// PHP program to find minimum
// difference of maximum and
// minimum of K number.

// Return minimum difference
// of maximum and minimum
// of k elements of arr[0..n-1].
function minDiff( \$arr , \$n , \$k )
{
\$INT_MAX = 2147483647;
\$result = \$INT_MAX ;

// Sorting the array.
sort( \$arr , \$n );
sort( \$arr );

// Find minimum value among
// all K size subarray.
for ( \$i = 0; \$i <= \$n - \$k ; \$i ++)
\$result = min( \$result , \$arr [ \$i + \$k - 1] -
\$arr [ \$i ]);
return \$result ;
}

// Driver Code
\$arr = array (10, 100, 300, 200, 1000, 20, 30);
\$n = sizeof( \$arr );
\$k = 3;
echo minDiff( \$arr , \$n , \$k );

// This code is contributed by nitin mittal.
?>``````

``20``