java数据结构与算法刷题-----LeetCode378. 有序矩阵中第 K 小的元素

LeetCode378之有序矩阵中第 K 小的元素(相关话题:优先队列,二分) 优先队列,二分法求解 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

解题思路
  1. 已知矩阵相对有序,可以用二分搜索,不过和一维数组排序不同,这是二维的
  2. 每一行都递增,每一列也是递增,所以每一行的最后一个元素都是当前行最大的。每一列的最下面元素也都是当前列最大的
  3. 所以,随便划分一个矩形区域,左上角都是最小的元素,右下角都是最大的元素。
  4. 此时就有了两个边界,让我们来找到这个区域的最大值和最小值的中间值(不一定是矩阵中的元素)。然后判断,矩阵中元素谁比这个中间值小。只需要判断每行的后面的元素即可,因为每行递增排序,最后面的一定是最大的,如果最后一个比mid中间值小,那么这一行都比它小,如果倒数第2个元素比mid小,那么这一行前面的元素,一直从前往后到倒数第二个都比mid小。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
代码:时间复杂度O( n ∗ l o g 2 r − l n*log_2{r-l} n∗log2​r−l),二分查找进行次数为 O( l o g 2 r − l log_2{r-l} log2​r−l),每次操作时间复杂度为 O(n). 空间复杂度O(1)

在这里插入图片描述

class Solution {
    public int kthSmallest(int[][] matrix, int k) {
        int rows = matrix.length;//行数
        int cols = matrix[0].length;//列数
        int l = matrix[0][0];//左上角元素
        int r = matrix[rows-1][cols-1];//右下角元素
        while(l < r){//如果满足"小的" 不大于 "大的",就可以继续循环
            int mid = l + (r-l)/2;//找到他俩的中位数
            int count = checkValue(matrix, mid);//获取这个数在数组所有元素排好序后,它的相对位置
            if(count < k){//如果这个数比目标值k小,说明我们应该在mid元素的右下区域找
                l = mid+1;
            } else {//否则在mid元素的左上区域找
                r = mid;
            }
        }
        return l;//最终,二分区域只剩一个元素或没有元素
    }

    public int checkValue(int[][] matrix, int mid){
        int r = 0;//行下标
        int c = matrix[0].length-1;//列下标
        int count = 0;//计数
        while(r< matrix.length && c >= 0){//如果行下标和列下标不越界就继续
            if(matrix[r][c] <= mid){//如果当前元素比mid小
                r++;//行需要进行下移,继续判断
                count += (c+1);//既然下移了一行,那么就统计一行的元素,一行有c+1列,就有c+1个元素需要统计
                //因为数组下标从0开始,c是当前二分区域的最后一列的下标,所以有c+1列
            } else {//如果当前元素比mid还大,就说明没有我们要找的元素,让列前移一列
                c--;
            }
        }
        return count;//最终返回有几个元素比mid小。
    }
}
LABVIEW学习之MODBUS-TCP通讯 LABVIEW学习之MODBUS-TCP通讯 1,MODBUS-TCP通讯介绍: MODBUS通讯是工业上面经常用到的一种通讯协议。该协议的原理及介绍不在此累述,下面直接介绍LABVIEW对此协议的应用。 2,MODBUS通讯所需的函数: 安装了DSC模块之后可以在数据通信内找到相关函数 3 ,主VI 主要思路就是使用状态机来进行连接 读取 写入 断开。使用枚举类型来选择状态: 1,连接 2,写入多个M继电器: 3,写入单个M继电器 4,写入双字节D... 阅读详情

相关推荐

Dify DSL文件分享 Dify讨论群 大模型token资源等(持续收集更新)

基于LLMOps平台-Dify的一站式学习平台。包含不限于:Dify案例、DSL文件分享、模型接入、Dify交流讨论等各类资源分享。

同名公众号:dify实验室 3717

【Java语言】力扣系列----378. 有序矩阵中第K小的元素

题目描述: 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。 具体代码实现如下: /* 利用二分法的思想对有序矩阵进行排序,寻找第K小的元素,根据题意得:矩阵左往右、从上往下递增。故取一个中间数mid=left+(right-left)/2, 从矩阵左下角matr

一只小白的奋斗历程的博客 254

利用Pandas进行高效网络数据获取

本文将重点介绍如何使用Pandas库进行网络爬虫。爬取数据是获取互联网上信息的常见方式之一,而Pandas作为一种强大的数据处理和分析工具,为我们提供了便捷的方法来处理和清洗从网页上获取的数据。文章将从爬取网页数据开始,包括使用Python的Requests库发送HTTP请求获取网页内容,并使用Pandas的功能来解析和提取所需的数据。我们还将讨论如何处理网页中的表格数据、处理和清洗数据、保存数据到文件等常见任务。

ak_bingbing的博客 1439

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

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

ylumwd的博客 768

GPS-SDR-SIM使用详解

GPS-SDR-SIM 是一款开源工具,能够生成 GPS 基带信号数据流,这些数据流可通过软件定义无线电(SDR)平台(如 ADALM-Pluto、bladeRF、HackRF、USRP 等)转换为射频(RF)信号。简单来说,它能模拟 GPS 卫星信号,帮助开发者或爱好者测试 GPS 接收设备的性能,而无需依赖真实的卫星信号。

qq_35621280的博客 1241

EMC设计技巧及经验总结3:TVS的使用

Way back in undergrad circuits class(回到本科时的电路课程), our TA(助教) loved to give uslittle “black box” circuits. We’d measure the voltage and current characteristics, then have to determine what compone

snmplink的博客 2411

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

378. 有序矩阵中第K小的元素 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。 请注...

Marcus 3384

实测可复现|2026 Cloudflare盾v4.0反反爬全实战:从JS/WASM逆向到JA3指纹伪装,手把手突破拦截(附完整逆向代码+避坑手册)

本文以2026年Cloudflare盾v4.0(集成Shield Synapse v2.0)为核心,全程以实战复盘为视角,拆解了从JS/WASM混合逆向、全维度指纹伪装(JA3+浏览器指纹)、人类行为模拟,到代理池搭建的全流程,整合了完整可复现的代码,所有步骤和踩坑点均为实测所得,无任何AI套话,新手也能跟着复现,最终实现爬取成功率从12%提升至95%+。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1690

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

从传感器到执行-智能家居 Agent 的感知-决策-执行闭环

本文提出了一种面向智能家居的感知型Agent架构,通过"感知-决策-执行"的闭环系统实现智能化控制。感知模块整合多源传感器数据,决策模块基于规则或机器学习模型生成控制策略,执行模块完成设备操作。系统能够实时监测环境参数和用户状态,自动调节温度、照明等设备,提升家居舒适度。该架构可扩展为多模态感知与强化学习相结合的智能系统,为智慧家居发展提供技术基础。

一键难忘的博客 1123

Machine Unlearning: A Survey

机器学习已经引起了广泛的关注,并发展成为一种使能技术,用于广泛的高度成功的应用,如智能计算机视觉、语音识别、医疗诊断等。然而,由于隐私、可用性和/或被遗忘权,一些特定样本的信息需要从称为机器遗忘的模型中删除,这就产生了一种特殊的需求。这项新兴技术因其创新性和实用性而引起了学术界和工业界的极大兴趣。与此同时,这个雄心勃勃的问题导致了许多旨在应对其挑战的研究工作。据我们所知,没有任何研究分析过这一复杂的主题,也没有比较过现有的遗忘解决方案在不同场景下的可行性。因此,通过这项调查,我们旨在了解遗忘技术的关键概念。

c_cpp_csharp的专栏 1159

Leetcode刷题100天—378. 有序矩阵中第 K 小的元素(优先队列)—day16

前言: 作者:神的孩子在歌唱 大家好,我叫运智 给你一个 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]],

智的博客 1997

我写了一个自动识别火车车厢位置的算法【lidar点云识别】

我写了一个自动识别火车车厢位置的算法【lidar点云识别】

qq_43212290的博客 799

LeetCode题练习与总结:有序矩阵中第 K 小的元素--378

本文详细介绍了在有序矩阵中查找第 k 小元素的解题思路和具体实现。通过二分查找和矩阵有序性质,实现了时间复杂度为 O(n log(max - min)) 的算法,并总结了相关知识点。

一直学习永不止步 786

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

LeetCode 378. 有序矩阵中第K小的元素(二分查找)

文章目录1. 题目2. 解题2.1 暴力法2.2 二分查找 1. 题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。 请注意,它是排序后的第k小元素,而不是第k个元素。 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。 说明: 你可以假设 k...

Michael是个半路程序员 1450

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Leetcode:NO.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 。 链接:https://leetcode-cn.com/problems/kth-smallest-elemen

泛泛之素 1262

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

有序矩阵中第K小的元素(LeetCode第378题)java实现

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

alan_gaohaodong的博客 529

【每天一道leetcode】中等 - 378.有序矩阵中第k小的元素

文章目录解法一代码思路问题&解决方法 求一个二维数组中第k小的元素,此数组不一定有序,题目具体内容见正文内链接。 题目链接:https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix/ 知识点: 二维数组转一维数组 Arrays工具类对数组排序 解法一 代码 /* * @author: mychangee * @date: 2020-07-02 18:32 */ import java.util.Arra

莫及的个人博客 297

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

题目及测试 package pid378; /* Kth Smallest Element in a Sorted Matrix 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。 请注意,它是排序后的第k小元素,而不是第k个元素。 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, ...

今天吃了吗的博客 380

【leetcode】378. 有序矩阵中第K小的元素 java实现

1. 题目复现 给定一个n x n矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k小的元素。 请注意,它是排序后的第 k小元素,而不是第 k 个不同的元素。 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。 提示: 你可以假设 k 的值永远是有效的,1 ≤ k ≤ n^2。 2. Solution 2.1 方法一:直接排序 将这个二维数组另存为为一维数组,并对该一维数组进行排序。最后输

lanheboyuan的博客 250

LeetCode(378):有序矩阵中第K小的元素 Kth Smallest Element in a Sorted Matrix(Java)

2019.10.3 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 这道题可以有两个思路: 1.最大堆 参考LeetCode(215):数组中的第K个最大元素 Kth Largest Element in an Array + 快速排序(Java)和前 K 个高频元素,可...

NJU_ChopinXBP的博客 406

leetcode【每日一题】378. 有序矩阵中第K小的元素 Java

题干 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。 提示: 你可以假设 k 的值永远是有效的,1 ≤ k ≤ n2 。 二分法 给定一个矩阵里的数matrix[i][j],比它小的一定在左上方。 于是从矩阵左下角开始二分, 它的上边都

qq_43491066的博客 186

leetcode刷题记录

刷题过程记录

洪肥肥的博客 2063

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

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

今晚打老虎 450

LeetCode刷题——有序矩阵中第 K 小的元素#378#Medium

本文的题目作者想到2种方法,分别是归并排序方法和二分查找方法,其中二分查找方法使用Java进行编写,而归并排序方法使用Python进行编写,当然这可能不是最优的解法,还希望各位大佬给出更快的算法。...

喷火龙与水箭龟的博客 235

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

思路: 1.使用最小堆 我的做法就是使用最小堆来存放那些可能的最小值,一个值为当前最小值,那么下一个最小值会是它的右边和下边的那个值,因此要把这两个都放进最小堆里面去,为了防止存放重复的数字还搞了个布尔数组。 class Solution { public int kthSmallest(int[][] matrix, int k) { if(matrix == null...

fsdgfsf的博客 192
上一篇: java数据结构与算法刷题-----LeetCode240. 搜索二维矩阵 II
下一篇: java数据结构与算法刷题-----LeetCode645. 错误的集合(位运算解法需要重点掌握)
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值