当前位置: 首页 > article >正文

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代码

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

在这里插入图片描述


http://www.kler.cn/a/320514.html

相关文章:

  • 网关在能源物联网中扮演了什么角色?
  • 深度学习基础练习:代码复现transformer重难点
  • VMware 中 虚拟机【Linux系统】固定 ip 访问
  • IPTV智慧云桌面,后台服务器搭建笔记
  • 解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题
  • QT使用libssh2库实现sftp文件传输
  • TypeScript 设计模式之【建造者模式】
  • 基于python+spark的外卖餐饮数据分析系统设计与实现(含论文)-Spark毕业设计选题推荐
  • Ansible-template模块动态生成特定文件
  • Spring Boot 整合MyBatis-Plus 实现多层次树结构的异步加载功能
  • 【MATLAB源码-第176期】基于matlab的16QAM调制解调系统频偏估计及补偿算法仿真,对比补偿前后的星座图误码率。
  • 力扣(leetcode)每日一题 2306 公司命名
  • Redis数据持久化总结笔记
  • 中国蚁剑(antSword)安装使用
  • Vue.js与Flask/Django后端配合:构建高效Web应用
  • 解决【WVP服务+ZLMediaKit媒体服务】加入海康摄像头后,能发现设备,播放/点播失败,提示推流超时!
  • c++基础部分
  • day01——登录功能
  • Eclipse离线安装Tomcat插件
  • UE5 C++: 插件编写05 | 批量删除无用资产
  • 神经网络(五):U2Net图像分割网络
  • python爬虫案例——腾讯网新闻标题(异步加载网站数据抓取,post请求)(6)
  • MySQL --数据类型
  • 生成PPT时支持上传本地的PPT模板了!
  • 【从0开始自动驾驶】用python做一个简单的自动驾驶仿真可视化界面
  • Stable Diffusion 使用详解(11)--- 场景ICON制作