Choose k array elements such that difference of maximum and minimum is minimized

06 Jul, 2022
Given an array of n integers and a positive number k. We are allowed to take any k integers from the given array. The task is to find the minimum possible value of the difference between maximum and minimum of K numbers.
Examples: 
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) - min(10, 20, 30) = 30 - 10 = 20.

Input : arr[] = {1, 2, 3, 4, 10, 20, 30, 40, 
                                   100, 200}.
        k = 4      
Output : 3
The idea is to sort the array and choose k continuous integers. Why continuous? Let the chosen k integers be arr[0], arr[1], ...arr[r], arr[r+x]..., arr[k-1], all in increasing order but not continuous in the sorted array. This means there exists an integer p which lies between arr[r] and arr[r+x],. So if p is included and arr[0] is removed, then the new difference will be arr[r] – arr[1] whereas old difference was arr[r] – arr[0]. And we know arr[0] ≤ arr[1] ≤ ... ≤ arr[k-1] so minimum difference reduces or remains the same. If we perform the same procedure for other p like numbers, we get the minimum difference.
Algorithm to solve the problem: 
Sort the Array.Calculate the maximum(k numbers) – minimum(k numbers) for each group of k consecutive integers.Return minimum of all values obtained in step 2.
Sort the Array.
Calculate the maximum(k numbers) – minimum(k numbers) for each group of k consecutive integers.
Return minimum of all values obtained in step 2.
Below is the implementation of above idea : 
C++
Java
Python3
C#
PHP
Javascript
// 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 Programint 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 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 codepublic 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.
# 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# 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 codepublic 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 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.?>
<script>// javascript 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) {        var result = Number.MAX_VALUE;         // Sorting the array.        arr.sort((a,b)=>a-b);         // Find minimum value among        // all K size subarray.        for (i = 0; i <= n - k; i++)            result = Math.min(result, arr[i + k - 1] - arr[i]);         return result;    }     // Driver code             var arr = [ 10, 100, 300, 200, 1000, 20, 30 ];        var n = arr.length;        var k = 3;         document.write(minDiff(arr, n, k)); // This code contributed by gauravrajput1</script>
20

Time Complexity: O(nlogn).Auxiliary Space: O(1)
This article is contributed by Anuj Chauhan. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 
vt_m
nitin mittal
GauravRajput1
sionc140720
shivamanandrj9
hardikkoriintern
Amazon
Arrays
Sorting
Amazon
Arrays
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.