python-leetcode-1984. 学生分数的最小差值

部署运行你感兴趣的模型镜像

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

可以使用滑动窗口+排序的方式来解决这个问题:

解决思路:

  1. 排序数组:先对 nums 进行升序排序,这样相邻的元素差值更小,有利于找到最优解。
  2. 滑动窗口:定义一个窗口大小为 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. 排序后:[1, 4, 7, 9]
  2. 可能的窗口:
    • [1, 4] → 差值 3
    • [4, 7] → 差值 3
    • [7, 9] → 差值 2
  3. 最小差值为 2

这个方法高效且易于实现! 🚀

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值