Leetcode2545:根据第 K 场考试的分数排序

题目描述:

班里有 m 位学生,共计划组织 n 场考试。给你一个下标从 0 开始、大小为 m x n 的整数矩阵 score ,其中每一行对应一位学生,而 score[i][j] 表示第 i 位学生在第 j 场考试取得的分数。矩阵 score 包含的整数 互不相同

另给你一个整数 k 。请你按第 k 场考试分数从高到低完成对这些学生(矩阵中的行)的排序。

返回排序后的矩阵。

代码思路:

  1. 获取输入数据的维度
    • m = len(score):获取成绩列表(二维列表)的行数,即学生人数。
    • n = len(score[0]):获取成绩列表(二维列表)的列数,即每个学生的成绩科目数。
  2. 抽取出第 k 列的成绩
    • k_score = [score[i][k] for i in range(0, m)]:使用列表推导式,从每个学生的成绩中抽取出第 k 列的成绩,形成一个新列表 k_score
  3. 创建成绩到索引的映射
    • d1 = {value:idx for idx, value in enumerate(k_score)}:创建一个字典 d1,键是第 k 列的成绩值,值是该成绩值在原列表 k_score 中的索引。这个映射用于后续根据排序后的成绩值找到原始的索引位置。
  4. 对第 k 列的成绩进行排序
    • k_score.sort():对列表 k_score 进行升序排序。
  5. 创建排序后索引到成绩的映射
    • d2 = {m - 1 - idx: value for idx, value in enumerate(k_score)}:创建一个字典 d2,键是逆序的索引(即从大到小),值是排序后的成绩值。这里逆序是为了后续方便从排序后的索引找到原始索引。由于排序是升序,所以这里通过 m - 1 - idx 转换为从大到小的索引,以便后续直接通过索引找到对应的原始成绩位置。
  6. 根据排序后的索引找到原始的学生成绩列表
    • 初始化一个空列表 ans 用于存放结果。
    • 遍历排序后的索引(从0到 m-1),通过 d2[i] 获取排序后的成绩值,然后通过 d1[d2[i]] 获取该成绩值在原始列表 k_score 中的索引(即原始的学生索引)。
    • 根据原始的学生索引,从原始的成绩列表 score 中取出相应的学生成绩列表,添加到结果列表 ans 中。
  7. 返回结果
    • return ans:返回排序后的学生成绩列表。

代码实现:

python 复制代码
class Solution:
    def sortTheStudents(self, score: List[List[int]], k: int) -> List[List[int]]:
        # 获取行和列的长度
        m = len(score)
        n = len(score[0])
        # 抽取出列的值
        k_score = [score[i][k] for i in range(0, m)]
        # 获取值对应的索引
        d1 = {value:idx for idx, value in enumerate(k_score)}
        # 排序
        k_score.sort()
        # 获取排序后对应的索引(注意排序是升序)
        d2 = {m - 1 - idx: value for idx, value in enumerate(k_score)}
        # 按照排序后的索引对应的值,寻找到原始值对应的序号
        ans = []
        for i in range(0, m):
            ori_order = d1[d2[i]]
            ans.append(score[ori_order])

        return ans
相关推荐
珹洺25 分钟前
C++从入门到实战(十)类和对象(最终部分)static成员,内部类,匿名对象与对象拷贝时的编译器优化详解
java·数据结构·c++·redis·后端·算法·链表
林泽毅25 分钟前
SwanLab硬件监控:英伟达、昇腾、寒武纪
python·深度学习·昇腾·英伟达·swanlab·寒武纪·训练实战
写bug的小屁孩30 分钟前
移动零+复写零+快乐数+盛最多水的容器+有效三角形的个数
c++·算法·双指针
飞川撸码32 分钟前
【LeetCode 热题100】208:实现 Trie (前缀树)(详细解析)(Go语言版)
算法·leetcode·golang·图搜索算法
这就是编程1 小时前
自回归模型的新浪潮?GPT-4o图像生成技术解析与未来展望
人工智能·算法·机器学习·数据挖掘·回归
小哲慢慢来1 小时前
解决auto_gptq安装问题
python
羑悻的小杀马特1 小时前
【狂热算法篇】探寻图论幽径:Bellman - Ford 算法的浪漫征程(通俗易懂版)
c++·算法·图论·bellman_ford算法
奔跑草-1 小时前
【服务端】使用conda虚拟环境部署Django项目
python·django·conda
ai大师2 小时前
给聊天机器人装“短期记忆“:Flask版实现指南
后端·python·gpt·flask·oneapi·中转api·apikey
Fantasydg5 小时前
DAY 31 leetcode 142--链表.环形链表
算法·leetcode·链表