清早水题秒一波!!!
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;
/**
* 题意:m 个拼图,选 n 个分给学生,要使这 n 个拼图中最大尺寸和最小尺寸的差值最小,求出该最小差值。
*/
public class Main {
public static void main(String[] args) throws IOException {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(
new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(System.out)));
int numOfStudents; // 学生的数量
int numOfPuzzles; // 拼图的数量
int[] sizeOfPuzzles; // 拼图的块数
int min; // 最小差值
while (in.nextToken() != StreamTokenizer.TT_EOF) {
numOfStudents = (int) in.nval;
in.nextToken();
numOfPuzzles = (int) in.nval;
sizeOfPuzzles = new int[numOfPuzzles];
for (int index = 0; index < numOfPuzzles; index++) {
in.nextToken();
sizeOfPuzzles[index] = (int) in.nval;
}
Arrays.sort(sizeOfPuzzles);
min = Integer.MAX_VALUE;
int temp;
for (int indexJ = numOfStudents - 1, indexI = indexJ; indexI < numOfPuzzles; indexI++) {
temp = sizeOfPuzzles[indexI] - sizeOfPuzzles[indexI - indexJ];
min = min > temp ? temp : min;
}
out.println(min);
}
out.flush();
}
}