題目連結:
題目意譯:
你被給定一個索引值從 0 開始的整數陣列 nums,其中 nums[i] 代表著第 i 位學生的分數。你同樣也被給定一整數 k。
從陣列中選出任意 k 位學生的分數,使得最高分以及最低分之差值最小化。
回傳最小可能的差值。
限制:
1 ≦ k ≦ nums.length ≦ 1000
0 ≦ nums[i] ≦ 10 ^ 5
範例測資:
範例 1:
輸入: nums = [90], k = 1
輸出: 0
解釋: 只有一個方式可以挑出一位學生的分數:
- [90]。最高分與最低分之差距為 90 - 90 = 0。
最小可能的差值為 0。
範例 2:
輸入: nums = [9,4,1,7], k = 2
輸出: 2
解釋: There are six ways to pick score(s) of two students:
- [9,4,1,7]。最高分與最低分之差距為 9 - 4 = 5。
- [9,4,1,7]。最高分與最低分之差距為 9 - 1 = 8。
- [9,4,1,7]。最高分與最低分之差距為 9 - 7 = 2。
- [9,4,1,7]。最高分與最低分之差距為 4 - 1 = 3。
- [9,4,1,7]。最高分與最低分之差距為 7 - 4 = 3。
- [9,4,1,7]。最高分與最低分之差距為 7 - 1 = 6。
最小可能的差值為 2。
解題思維:
先將陣列由小到大排序後,再窮舉所有長度為 k 的子陣列(如
這題),求出每個子陣列最高分與最低分的差距(即該子陣列的尾端元素減去開頭元素之值)。而所有子陣列當中的差值最小者即為所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。