先排序,在遍历找最小。 一开始看到测试样例 以为排序完 直接进行 第k个数 减去 第1个数就可以,后来发现 其实题意理解错误了,因为此时的差未必最小,如果有特殊的测试数据,比如说 1 2 3 4 5 5 5 6 这样的话 最小值 应该是1 也就是说 数组内部的数据 可以使相同的,我先入为主 以为数据都是不同的,因此 只能通过特殊的三种数据 ,也就是无重复的,加上对数组的遍历之后就可以解决这个问题了。
#include <iostream> #include <algorithm> using namespace std ; int main() { int n , k ; cin >> n >> k; int candidate[n]; int min = 99999999 ; for (int i = 0 ; i < n ; ++i) cin >> candidate[i] ; sort(candidate,candidate+n) ; for ( int i = 0 ; i < n-k ; ++i) { int unfairness = candidate[i+k-1] - candidate[i] ; if( unfairness < min ) min = unfairness ; } cout << min << endl ; return 0 ; }