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

  • 题目链接
  • 思路分析
  • 代码实现

题目链接


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

思路分析

题目中又一次提到了有序,就能够猜想能够使用二分法

  • 那么如果要使用二分的话,我们就需要左右边界,我们寻找的是某一个元素,因此我们考虑使用数组的值域,在数组中,左上和右下分别是最小和最大值,我们可以通过求解中值的方法来不断缩小范围
  • 当我们得到一个中值之后,需要注意的就是如何计算比中值小的数字的数量
  • 从最后一行开始统计,若当前值小于mid,由于每一列也都是升序排列,所以这一列也都小于mid,可以加入num,
  • 如果这一整列都小于mid的话,对j++
  • 如果当前数大于mid的话,对i–
  • 最终就能得到小于mid的num数量
  • 在这之后我们就要进行二分了,根据我们返回值nums >= k可知,如果他恰好相等的话,那么mid就是我们要的数,因此可选区间在于**[left , mid]**
  • 如果小于的话,可选区间在于**[mid+1, right]**

代码实现

class Solution {public:bool check(vector<vector<int>>& matrix, int mid, int k){int n = matrix.size()-1;int i = n;int j = 0;int nums = 0;while(i >= 0 && j <= n){if(matrix[i][j] <= mid){nums += (i+1);j++;}elsei--;}return nums >= k;}int kthSmallest(vector<vector<int>>& matrix, int k) {int n = matrix.size();int left = matrix[0][0];int right = matrix[n - 1][n - 1];while (left < right) {int mid = left + ((right - left) >> 1);if (check(matrix, mid, k)) {right = mid;} else {left = mid + 1;}}return left;}
};

[leetcode]378. 有序矩阵中第 K 小的元素相关推荐

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

    文章目录 1. 题目 2. 解题 2.1 暴力法 2.2 二分查找 1. 题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素. 请注意,它是排序后的第k小元素,而 ...

  2. Leetcode 378. 有序矩阵中第K小的元素 解题思路及C++实现

    解题思路: 使用一个最大堆遍历matrix中的数.保持最大堆中的元素数量不超过k,最后得到的堆顶元素值就是第k小的数. class Solution { public:int kthSmallest( ...

  3. 【LeetCode】378. 有序矩阵中第 K 小的元素(js 实现)

    1.题目:378. 有序矩阵中第 K 小的元素 - 力扣(LeetCode) (leetcode-cn.com) 2.实现 (1)方法一: 直接将矩阵转换为一维数组,再将一维数组进行排序,最后取第k个 ...

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

    378.有序矩阵中第K小的元素 思路: 利用优先级队列,改成最大堆,存入队列中,大于k抛出即可 代码实现 class Solution {public int kthSmallest(int[][] ...

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

    前言: 作者:神的孩子在歌唱 大家好,我叫运智 给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素. 请注意,它是 排序后 的第 k 小元素,而不是 ...

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

    2020-05-25 1.题目描述 有序矩阵中第K小的元素 2.题解 1.优先队列 2.使用二分查找 class Solution { public:int kthSmallest(vector< ...

  7. 174. 地下城游戏;剑指 Offer 40. 最小的k个数;378. 有序矩阵中第K小的元素;703. 数据流中的第K大元素

    一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士的初始 ...

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

    我的第一反应是,在这个矩阵中取任意一点(i,j),那么至少有 (i + 1) (j + 1)- 1* 个数比他小(即左上角的部分矩阵),然后再想想剩余的比它小的数必定是分布在这个小矩阵的下左两条边,由 ...

  9. leetcode 378. Kth Smallest Element in a Sorted Matrix | 378. 有序矩阵中第 K 小的元素(小根堆)

    题目 https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/ 题解 套了下小根堆模板. class Solutio ...

最新文章

  1. hdu 4888 最大流慢板
  2. Spring Boot集成Thymeleaf模板引擎
  3. 替代JavaOne 2013
  4. 用虚拟机安装了红帽后,我确实没设置用户名密码,但现在一打开就让输入用户名密码。这种情况该怎么办??
  5. Android 如何添加一个新的时区
  6. Directx11学习笔记【七】 游戏定时器的实现
  7. robocode_Robocode大师的秘密,多态敌人缓存
  8. 自己编写DLL文件——注册——VB工程引用——标准EXE调用(含例子)
  9. oracle存储过程更新权限不足,oracle创建存储过程时报权限不足
  10. 高斯消元(求解n元一次方程组)
  11. vs2019下载安装
  12. [Jetson TX2] NVIDIA Jetson TX2 参数介绍
  13. 大巧不工 JGraph简介和使用技巧(转)
  14. pdf和图像文字识别提取工具
  15. 双卡手机管理短信通知 | 屏蔽短信通知
  16. 按键精灵提交表单发起post请求
  17. mysql中常用的三种插入数据的语句
  18. 智能驾驶整车在环实验室SYNO解决方案
  19. 软件工程与实践(第3版)课后习题(二)
  20. 小程序超出文字显示为省略号(代码简单的无话可说)

热门文章

  1. 计算机与科学hh,Mary-第十六届和谐人机环境联合学术会议 (HHME2020)
  2. 微型torch去马赛克笔记二
  3. linux系统访问NAS网络存储
  4. Freely Available Standards
  5. RS485自行收发的实现方法
  6. Android ContentProvider之联系人数据库及操作
  7. html5如何让多张图片重叠,HTML5图片层叠
  8. 从《9败1胜》了解王兴如何10年创业带领美团上市!
  9. blueman.bluez.errors.DBusFailedError: Protocol not available...
  10. mac上打开chm文件