【优先队列】378. 有序矩阵中第 K 小的元素

这篇具有很好参考价值的文章主要介绍了【优先队列】378. 有序矩阵中第 K 小的元素。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

解题思路

  • 初始化最大堆: 创建一个最大堆的优先队列,这使得队列中的元素按照降序排列。

  • 遍历矩阵并更新队列: 通过嵌套的循环遍历二维矩阵中的每一个元素,将元素添加到最大堆中。

  • 控制队列大小: 在添加元素后,检查队列的大小是否已经达到了k。如果已经达到,而且当前遍历到的元素大于队列中最大的元素,就可以提前结束遍历。因为矩阵是按行和列有序的,一旦超过第k小的元素,后面的元素肯定更大。同时,如果队列的大小超过了k,就从队列中移除最大的元素,以保持队列中仅有k个最小的元素。

  • 返回结果: 最终返回最大堆中的最大元素,这就是矩阵中第k小的元素。文章来源地址https://www.toymoban.com/news/detail-814670.html

class Solution {
    public int kthSmallest(int[][] matrix, int k) {
        // 使用优先队列  保留K个最小的元素
        // 使用最大堆  那么队列的元素都是降序排列   最大的元素在队头
        PriorityQueue<Integer> MaxPQ = new PriorityQueue<>(Collections.reverseOrder());

        for(int[] row:matrix){
            for(int num: row){
                // 如果队列已经满了 并且当前的元素大于队列中的最大元素 也就是队头  第k小元素
                if(MaxPQ.size() == k && num > MaxPQ.peek()){
                    break;
                }
                MaxPQ.add(num);// 当前遍历的元素添加到优先队列中

                // 如果队列元素超过K  移除队头元素
                if(MaxPQ.size() > k){
                    MaxPQ.remove();
                }
            }
        }

        // 当把整个矩阵遍历完毕之后  队头元素就是当前队列最大元素 也就是第k小元素
        return MaxPQ.remove();

    }
}

到了这里,关于【优先队列】378. 有序矩阵中第 K 小的元素的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LeetCode-中等题】230. 二叉搜索树中第K小的元素

    该题最大的特点就是这个树是二叉树: 所以, 中序遍历对二叉树的遍历本身就是有序的 思想很简单,就是通过层序遍历将节点都加到List集合中,然后调用 Collections.sort(list)排序后 ,找第k小的数 list.get(k-1) 二叉树中序遍历得到的值序列是递增有序的 借助一个list集合来接收有

    2024年02月10日
    浏览(43)
  • 力扣HOT100 - 230. 二叉搜索树中第K小的元素

    解题思路:

    2024年04月25日
    浏览(40)
  • 每日一题 230二叉搜索树中第K小的元素(中序遍历)

    给定一个二叉搜索树的根节点  root  ,和一个整数  k  ,请你设计一个算法查找其中第  k   个最小元素(从 1 开始计数)。 示例 1: 示例 2:

    2024年02月10日
    浏览(43)
  • leetcode 215.数组中第k大的元素

    🌟 leetcode链接:数组中第k大的元素 思路: 使用堆数据结构,大堆的堆顶是堆内最大的元素,也就是把当前堆 pop k - 1 次,第 k 次 top 出来的元素就是第 k 大的数。 代码:

    2024年02月09日
    浏览(54)
  • 【LeetCode热题100】打卡第39天:数组中第K个最大元素&最大正方形

    大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏! 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。在此专栏中,我们将会涵盖各种

    2024年02月16日
    浏览(45)
  • 【LeetCode】移除元素、删除有序数组中的重复项、合并两个有序数组

    🧑‍💻作者: @情话0.0 📝专栏:《LeetCode》 🔖题目链接:移除元素、删除有序数组中的重复项、合并两个有序数组 给你一个数组 nums 和一个值 val,你需要 原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空

    2023年04月09日
    浏览(77)
  • 图灵日记之Leetcode删除有序数组中的重复项&&合并两个有序数组&&移除链表元素

    给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过

    2024年02月04日
    浏览(58)
  • 每日一题——LeetCode1287.有序数组中出现次数超过25%的元素

    方法一 一次循环统计 题目给出的数据相同的元素都是相邻的,那么直接从头开始遍历,统计每种元素出现次数,当有元素次数超过arr.length/4即为要求的元素   消耗时间和内存情况: 方法二 方法一简化版 设步长step=arr.length/4,如果某个元素arr[i],跨越一个步长后arr[i+step],即

    2024年01月22日
    浏览(52)
  • 【C语言.oj刷题】有序#整型矩阵元素查找##{思路+C源码}

      目录  题目信息 题目分析: 法一: 遍历二维数组(低效) 思路 源码  局限性  法二: 对每一行二分查找(有所提效) 思路  源码 局限性 法三: 利用一切有利条件使用二分查找 思路 源码 局限性  二分查找源码:           有一个数字矩阵,矩阵的每行从左到右是

    2024年02月04日
    浏览(52)
  • 【Leetcode -21.合并两个有序链表 -83.删除排序链表中的重复元素】

    题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1, 2, 4], l2 = [1, 3, 4] 输出:[1, 1, 2, 3, 4, 4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] 输出:[0] 我们的思路是,先定义

    2023年04月24日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包