LeetCode简单题之学生分数的最小差值
生活随笔
收集整理的這篇文章主要介紹了
LeetCode简单题之学生分数的最小差值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
給你一個 下標從 0 開始 的整數數組 nums ,其中 nums[i] 表示第 i 名學生的分數。另給你一個整數 k 。
從數組中選出任意 k 名學生的分數,使這 k 個分數間 最高分 和 最低分 的 差值 達到 最小化 。
返回可能的 最小差值 。
示例 1:
輸入:nums = [90], k = 1
輸出:0
解釋:選出 1 名學生的分數,僅有 1 種方法:
- [90] 最高分和最低分之間的差值是 90 - 90 = 0
可能的最小差值是 0
示例 2:
輸入:nums = [9,4,1,7], k = 2
輸出:2
解釋:選出 2 名學生的分數,有 6 種方法: - [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
提示:
1 <= k <= nums.length <= 1000
0 <= nums[i] <= 10^5
來源:力扣(LeetCode)
解題思路
??最最簡單的思路就是直接翻譯題目,直接從數組中選出來k個元素然后找到最小的差值。
class Solution:def minimumDifference(self, nums: List[int], k: int) -> int:MIN=float('inf')for i in itertools.combinations(nums, k):if max(i)-min(i)<MIN:MIN=max(i)-min(i)return MIN
??但是這肯定避免不了大量的無效重復運算,以至于在LeetCode平臺上超時。為了避免大量重復的運算,我們需要很便捷地或者說很快的找到所選的k個元素的最大值和最小值,因此,需要將數組進行排序,就可以直接在頭和尾找到最值,而中間的那些值則可以略過不加入當前運算。排序之后尋找k個學生的最小差值同時也避免了大量的排列組合運算,每次尋出k個學生只需要按照一個固定大小的窗口滑動一次,這樣即保證了能夠找全所有組合同時也只需要算兩頭的值。
class Solution:def minimumDifference(self, nums: List[int], k: int) -> int:nums.sort()i=0j=k-1MIN=nums[j]-nums[i]i+=1j+=1while j<len(nums):if nums[j]-nums[i]<MIN:MIN=nums[j]-nums[i]i+=1j+=1return MIN
總結
以上是生活随笔為你收集整理的LeetCode简单题之学生分数的最小差值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode简单题之判断句子是否为全
- 下一篇: LeetCode简单题之在区间范围内统计