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.执行结果

相关推荐
skywalk81633 分钟前
继续推进心语项目6.15 @CodeArts
开发语言·算法·编程
2601_961845154 分钟前
花生十三图推思维导图|图形推理|技巧
数据结构·算法·链表·贪心算法·排序算法·线性回归·动态规划
开开心心就好8 分钟前
自动生成小学数学题库支持导出Word
人工智能·安全·leetcode·贪心算法·ocr·音视频·语音识别
bIo7lyA8v8 分钟前
算法复杂度的可视化评估与优化策略研究的技术8
算法
Skrrapper16 分钟前
从 DeepSeek、Qwen 到 GPT:一次企业级 AI 知识库项目的模型选型复盘
人工智能·gpt·算法
江屿风18 分钟前
C++图论基础Bellman-Ford与spfa算法如何判断负环
开发语言·c++·笔记·算法·图论
YHHLAI19 分钟前
LeetCode 136.只出现一次的数字 | 从遍历统计到位运算极致优化
算法·leetcode·职场和发展
lihao lihao27 分钟前
Linux线程同步与互斥
linux·数据结构·算法
进击的荆棘36 分钟前
优选算法——BFS
c++·算法·leetcode·宽度优先
南境十里·墨染春水9 小时前
C++ 工厂模式:从入门到进阶,彻底掌握对象创建的艺术
开发语言·c++·算法