1984. 学生分数的最小差值 - 力扣(LeetCode)


可以使用滑动窗口+排序的方式来解决这个问题:
解决思路:
- 排序数组:先对
nums进行升序排序,这样相邻的元素差值更小,有利于找到最优解。 - 滑动窗口:定义一个窗口大小为
k,遍历排序后的数组,计算每个窗口内最大值 - 最小值,记录最小的差值。
代码实现:
def minimumDifference(nums, k):
if k == 1:
return 0 # 只选一个学生,差值必然是 0
nums.sort() # 先排序
min_diff = float('inf') # 设定初始最小值
# 维护一个大小为 k 的滑动窗口
for i in range(len(nums) - k + 1):
min_diff = min(min_diff, nums[i + k - 1] - nums[i])
return min_diff
复杂度分析:
- 排序:
O(n log n) - 遍历窗口:
O(n) - 总复杂度:
O(n log n)
示例:
nums = [9, 4, 1, 7]
k = 2
print(minimumDifference(nums, k)) # 输出 2
解释:
- 排序后:
[1, 4, 7, 9] - 可能的窗口:
[1, 4]→ 差值3[4, 7]→ 差值3[7, 9]→ 差值2
- 最小差值为
2。
这个方法高效且易于实现! 🚀
859

被折叠的 条评论
为什么被折叠?



