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

LeetCode 378 - 有序矩阵中第 K 小的元素 在开发中,我们经常遇到需要处理大规模有序数据的场景,比如数据库分页、排行榜查询、或者处理排序过的矩阵。LeetCode 第 378 题“有序矩阵中第 K 小的元素”就是这样一个经典问题:它要求我们在一个行列都排好序的矩阵中,快速找到第 K 小的元素。本文将结合代码、算法思路和实际场景,带大家拆解这个题目的解法。 阅读详情
/**
 * 378. 有序矩阵中第K小的元素
 * @author wsq
 * @date 2020/10/09
	给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。
	请注意,它是排序后的第 k小元素,而不是第 k 个不同的元素。
	
	示例:
	matrix = [
	   [ 1,  5,  9],
	   [10, 11, 13],
	   [12, 13, 15]
	],
	k = 8,
	返回 13。
	
	链接:https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix
 */
package search;

import java.util.Comparator;
import java.util.PriorityQueue;

public class KthSmallest {
	/**
	 *	找到有序队列中第第K小的元素,包含重复的
	 *	采用归并排序的思想,找到第K个最小值结束
	 *	由于是n个有序队列归并排序,为了优化检索速度,采用小根堆维护,来优化时间复杂度
	 * @param matrix
	 * @param k
	 * @return
	 */
	public int kthSmallest(int[][] matrix, int k) {
		PriorityQueue<int[]> pq = new PriorityQueue<>(new Comparator<int[]>() {
			public int compare(int[] o1, int[] o2) {
				return o1[0] - o2[0];
			};
		});
		
		int n = matrix.length;
		
		for(int i = 0; i < n; ++i) {
			pq.offer(new int[] {matrix[i][0], i, 0});
		}
		
		for(int i = 0; i < k - 1; i++) {
			int[] now = pq.poll();
			if(now[2] != n - 1) {
				pq.offer(new int[] {matrix[now[1]][now[2] + 1], now[1], now[2] + 1});
			}
		}
		return pq.poll()[0];
    }
	
	public static void main(String[] args) {
		int[][] matrix = {{1,  5,  9},
		                  {10, 11, 13},
		                  {12, 13, 15}};
		int k = 8;
		KthSmallest ks = new KthSmallest();
		int ans = ks.kthSmallest(matrix, k);
		System.out.println(ans);
	}
}

LeetCode378之有序矩阵中第 K 小的元素(相关话题:优先队列,二分) 优先队列,二分法求解 阅读详情

相关推荐

【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素

给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。 示例 1: 输入:matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8 输出:13 解释:矩阵中的元素为 [1,5,9,10,11,12,13,13,15],第 8 小元素是 13 示例 2: 输入:matrix = [[-5]], k = 1 输出:-5

闻缺陷则喜何志丹 4948

【leetcode】有序矩阵中第 K 小的元素

堆、归并排序

weixin_44627672的博客 572

ICG setup timing violation介绍?

门控时钟(clock gating)在RTL级电路设计过程中进行低功耗优化常用方法,能够有效降低动态功耗(翻转功耗)。Clock gating cell 可以由与门,与非门,或门或者或非门构成,但很容易产生Glitch。在实际使用中,一般用ICG(集成门控时钟单元)来完成clock gating。 下图展示了glitch的产生原因 在CTS时钟树综合的时候,ICG不会被看作sink,通常放置在source点附近,因此就会出现如上图这种结果。上图可以看出,在分析DFF到ICG的setup timing

m0_61003348的博客 9811

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

378. 有序矩阵中第 K 小的元素 ●●、堆排序、归并排序、二分查找

chenyfan_blog 473

彻底卸载Ubuntu双系统,并完美回收100G空间给D盘

本文记录了安全卸载Ubuntu双系统并回收磁盘空间的全过程。作者首先通过Windows命令行彻底清除Ubuntu启动项,避免GRUB引导报错;随后在磁盘管理中删除Linux分区,将100G未分配空间合并至相邻的D盘。针对C盘空间不足问题,作者采用Dism++清理系统文件,并将用户文档、聊天记录等迁移至扩容后的D盘。最终实现了引导纯净、空间合理分配的目标,特别强调分区扩展必须遵循"相邻原则",建议通过间接迁移而非直接扩容来优化系统盘空间管理。

2403_85993278的博客 1512

【AI Infra】Perfetto性能分析工具指南

Perfetto是一款开源性能分析工具,提供系统级和应用级的活动数据追踪功能。其界面分为四个区域:左侧操作区(包含Trace查看、SQL查询、预置分析等功能)、上方信息区、中间图形化展示区以及下方详细信息区。工具支持快捷键操作(w/s缩放、a/d移动、m标记等),并能高效处理大体积Trace文件。通过Timeline分析可发现性能瓶颈,如案例中update_actor耗时过高的问题,最终定位到CPU offloading导致的MemcpyH2D操作耗时过长,提出了优化方案。Perfetto相比Systrac

baiweizeng的博客 1511

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

题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。 提示: 你可以假设 k 的值永远是有效的,1 ≤ k ≤ n^2 。 解题思路 解法一:大根堆 略 解法二:二分查找 矩阵内的元素是从左上到右下递增的,整个二维数组中 matrix[

zaker123的博客 241

YOLOv12超参数智能优化:基于内置Ray Tune的自动化调优实战指南

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有! 目标检测模型的性能瓶颈往往源于超参数配置不当。传统手动调优方式不仅耗时耗力,且难以找到全局最优解。YOLOv12集成的Ray Tune框架为解决这一难题提供了完整方案,通过分布式异步优化算法,可实现超参数搜索效率的指数级提升。实际测试表明,采用Ray Tune自动调优的YOLOv12模型,在COCO数据集上mAP指标平均提升3.8%,收敛速度加快2.1倍。在VisDrone无人机数据集上的跨域测试

LXY_LOVE36的博客 119

【LeetCode: 378. 有序矩阵中第 K 小的元素 + 二分】

【LeetCode: 378. 有序矩阵中第 K 小的元素 + 二分】给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。 你必须找到一个内存复杂度优于 O(n2) 的解决方案。

Coder_ljw的博客 1460

【蓝凌表单】JSP组件常用语法整理

【代码】【蓝凌表单】JSP组件常用语法整理。

烧硬盘 712

YOLOv11 改进 - 特征融合 | 替换 C3k2 涨点:GELAN 融合 CSP+ELAN 提精度

本文介绍了可编程梯度信息(PGI)和广义高效层聚合网络(GELAN)与 YOLOv11 的结合,以解决深度网络数据传输时的信息丢失问题。PGI 能为目标任务提供完整输入信息,计算目标函数以更新网络权重。GELAN 作为轻量级网络架构,由 SPPELAN、ELAN1、RepNCSPELAN4 等模块组成。我们将 GELAN 代码集成进 YOLOv11, 实验脚本显示,结合 GELAN 的 YOLOv11 在 MS COCO 数据集目标检测任务中或有良好表现。

魔改工程师的博客 1243

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

LeetCode 378「有序矩阵中第 K 小的元素」是一道非常容易被写“重”的题。 很多人第一反应是: 既然矩阵是有序的,那我全部摊平成数组,再排序不就好了? 没错,能过,但空间复杂度直接炸到 O(n²),而题目明确告诉你: 你必须用更省内存的方式。 这道题真正考的不是排序,而是你有没有意识到: “答案本身也是有序的,可以用二分去猜。” 这篇文章会重点讲清楚:

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 900

Android系统开发工程师面试指南与参考答案

本文整理了Android系统开发工程师面试常见问题与参考答案。核心内容涵盖:1)Framework层定制方法,如修改HAL和系统服务;2)ANR问题分析工具(systrace)与解决方案;3)性能优化实践,包括开机加速和功耗管理;4)四大组件工作机制与应用案例;5)Native崩溃调试技巧。文章强调通过AOSP源码研究、工具使用和项目案例准备来提升面试表现,重点考察应聘者的系统开发深度和实操能力。参考答案均基于实际开发经验,提供可量化的优化成果说明。

郑伟强dev的专栏 257

LeetCode 378:有序矩阵中第k小的元素

LeetCode 378:有序矩阵中第k小的元素题目描述解题思路代码实现总结 题目描述 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。 请注意,它是排序后的第k小元素,而不是第k个元素。 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。 说明: 你可以假设 k 的值...

香农三定律的博客 252

EZ-INSAR工具箱(使用历史问题)

把 rasterio 升到 1.3+(或退回 py39)→features能 import → 脚本能跑 → 出图 → MATLAB 不再报错!

2301_79258000的博客 121

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

分析数据(1)数据量。从下面可以看出300∗300=6∗104O(N2)108O(N∗logN)(2)数据特性思路。

OceanStar的博客 635

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

Leetcode 378. 有序矩阵中第K小的元素 题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。 提示: 你可以假设 k 的值永远是有效的,1 ≤ k ≤ n2 。 题解 二分查找 显然我们是在[matrix[0][0],mat

weixin_43750513的博客 214

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【中等】力扣算法题解析LeetCode378:有序矩阵中第 K 小的元素

LeetCode 378题要求在行列非递减的n×n矩阵中快速找到第k小的元素。利用二分查找在值域[min, max]内定位目标值,通过双指针从右上角遍历统计≤mid的元素数量(O(n)时间)。时间复杂度优化至O(n log(max-min)),优于直接排序的O(n² log n)。

ylumwd的博客 768

Java实现 LeetCode 378 有序矩阵中第K小的元素

378. 有序矩阵中第K小的元素 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。 请注意,它是排序后的第k小元素,而不是第k个元素。 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。 说明: 你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n...

南 墙 1万+

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

Leetcode 378. 有序矩阵中第 K 小的元素 1. 问题描述 2. 思路 左上角元素作为left,右下角元素作为right 执行二分查找 3. 代码 func kthSmallest(matrix [][]int, k int) int { n := len(matrix) left, right := matrix[0][0], matrix[n-1][n-1] for left <= right { mid := left +

菜到不敢run 606

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

leetcode 378. 有序矩阵中第K小的元素 题目详情 题目链接 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。 提示: 你可以假设 k 的值永远是有效的,1 ≤ k ≤ n2 。 我的代码 class Solution { public:

qq_33789406的博客 112

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

378. 有序矩阵中第K小的元素 普通解法: class Solution { public int kthSmallest(int[][] matrix, int k) { ArrayList<Integer> list = new ArrayList<>(); for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].lengt

SUN__CGJ的博客 230

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

题目:leecode 378. 有序矩阵中第K小的元素 题目描述: 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。 提示: 你可以假设 k 的值永远是有效的,1 ≤ k ≤ n2 。 解题思路(本人): 思路讲解: 归并的思想:首先是

u010155337的博客 286

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

因为每次值域收缩都保证了第 k 小的数在 left ~ right 之间,当 left==right 时,第 k 小的数即被找出,等于left//left和right是矩阵值不是矩阵下标//一步步收缩值域范围直至left==right//因为每次值域收缩都保证了第 k 小的数在 left ~ right 之间,当 left==right 时,第 k 小的数即被找出,等于left//避免溢出//满足 num >= k,范围太大,移动right至mid, 范围收缩。

Helene1996的博客 722
上一篇: 面试题 10.05. 稀疏数组搜索(折中查找 + 递归 实现)
下一篇: 416. 分割等和子集
Lazy mode
博客等级 码龄10年 13粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值