Short Problem Definition:
Given a list of N integers, your task is to select K integers from the list such that its unfairness is minimized.
Link
Complexity:
time complexity is O(N\*log(N))
space complexity is O(N)
Execution:
The unfairness is the distance between K elements in a sorted array.
Solution:
#!/usr/bin/py
if __name__ == '__main__':
n = input()
k = input()
candies = [input() for _ in range(0,n)]
candies.sort()
min_diff = 1000000000
## Write code here to compute the answer using (n, k, candies)
for i in xrange(n - k + 1):
min_diff = min(min_diff, candies[i+k-1] - candies[i])
print min_diff
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <limits>
using namespace std;
int main() {
/* The code required to enter n,k, candies is provided*/
int N, K, unfairness = std::numeric_limits<int>::max();
cin >> N >> K;
int candies[N];
for (int i=0; i<N; i++)
cin >> candies[i];
sort(candies, candies + N);
for (int i=0; i < N - K + 1; i++){
unfairness = min(unfairness, candies[i+K-1] - candies[i]);
}
cout << unfairness << "\n";
return 0;
}