目录

Leetcode 378. 有序矩阵中第 K 小的元素

1.题目基本信息

1.1.题目描述

给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。

请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。

你必须找到一个内存复杂度优于 O(n^2) 的解决方案。

1.2.题目地址

https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix/description

2.解题方法

2.1.解题思路

归并排序+小根堆

2.2.解题步骤

第一步,初始化小根堆,其中堆中每个元素为(矩阵元素值,行索引,列索引)。初始化将矩阵所有行的第一个元素的item压入堆中。

第二步,循环k次,每次循环弹出堆中的最小item,并将该item的右边的一个元素添加到小跟堆中(确保该item没有超过矩阵范围)。第k次循环弹出的元素值即为题解。

3.解题代码

Python代码

python 复制代码
import heapq

class Solution:
    # 归并排序+小根堆
    def kthSmallest(self, matrix: List[List[int]], k: int) -> int:
        length=len(matrix)
        # 第一步,初始化小根堆,其中堆中每个元素为(矩阵元素值,行索引,列索引)。初始化将矩阵所有行的第一个元素的item压入堆中。
        heap=[]
        for i in range(length):
            heapq.heappush(heap,(matrix[i][0],i,0))
        # 第二步,循环k次,每次循环弹出堆中的最小item,并将该item的右边的一个元素添加到小跟堆中(确保该item没有超过矩阵范围)。第k次循环弹出的元素值即为题解。
        result=0
        for j in range(k):
            item=heapq.heappop(heap)
            result=item[0]
            nextCol=item[2]+1
            if nextCol<length:
                heapq.heappush(heap,(matrix[item[1]][nextCol],item[1],nextCol))
        # print(result)
        return result

4.执行结果

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
做人求其滴3 分钟前
蓝桥杯C/C++省赛/国赛注意事项及运行环境配置
算法·蓝桥杯·编译器·c/c++·算法竞赛·运行环境·第十六届
写个博客23 分钟前
代码随想录算法训练营第十五天
算法
铃煦37 分钟前
《算法笔记》3.3小节——入门模拟->图形输出
笔记·算法·图论
LuckyLay41 分钟前
LeetCode算法题(Go语言实现)_39
算法·leetcode·golang
uhakadotcom1 小时前
NVIDIA Resiliency Extension(NVRx)简介:提高AI模型训练的容错能力
算法·面试
Tisfy1 小时前
LeetCode 2843.统计对称整数的数目:字符串数字转换
算法·leetcode·字符串·题解
Yyq130208696821 小时前
KTH5772 系列游戏手柄摇杆专用3D 霍尔位置传感器
算法·游戏·3d·小杨13020869682
KyollBM1 小时前
【CF】Day30——Codeforces Round 824 (Div. 2) C + Codeforces Round 825 (Div. 2) BC1
算法
DataFunTalk1 小时前
复旦肖仰华:大模型的数据科学!
前端·后端·算法
AI十八式2 小时前
KDD 2025 顶会最新力作,多变量时间序列预测登顶!
算法·机器学习·支持向量机