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

梅州做网站公司优质外链平台

梅州做网站公司,优质外链平台,方维服务客户类型,北京个人网站备案题目信息 LeetoCode地址: . - 力扣(LeetCode) 题解内容大量转载于:. - 力扣(LeetCode) 题目理解 题意很直观,就是求二维矩阵中所有元素排序后第k小的数。 最小堆写法 该写法不再赘述,维护…

题目信息

LeetoCode地址: . - 力扣(LeetCode)

题解内容大量转载于:. - 力扣(LeetCode)

题目理解

题意很直观,就是求二维矩阵中所有元素排序后第k小的数。

最小堆写法

该写法不再赘述,维护一个大小为k的小顶堆,遍历矩阵所有元素进行入堆操作。

时间复杂度:O(nlogk)

空间复杂度:O(k)

class Solution {public int kthSmallest(int[][] matrix, int k) {PriorityQueue<Integer> heap = new PriorityQueue<>((a,b) -> (int)b-(int)a);for (int i = 0; i<matrix.length; i++) {for (int j = 0; j<matrix[0].length;j++) {if (heap.size() < k) {heap.offer(matrix[i][j]);} else if (matrix[i][j] < heap.peek()) {heap.poll();heap.offer(matrix[i][j]);}}}return heap.peek();}
}

二分写法

由于矩阵在行和列上都是有序的,因此左上角的元素matrix[0][0]一定是最小的,右下角的元素matrix[n-1][n-1]一定是最大的。这两个元素,我们分别记为l 和 r.

以下图为例:

可以发现, 任取一个数mid满足l<=mid<=r, 那么矩阵中不大于mid的数,肯定都分布在矩阵的左上角。

例如下图, 取mid=8:

我们可以看出,矩阵中大于mid的数和不大于mid的数分别形成了两个版本,沿着一条锯齿线将这个矩形分隔开。其中左上角板块的大小即为不大于mid的数的数量。

我们只需沿着这条锯齿线走一遍即可计算出这两个板块的大小,自然就统计出这个矩阵中不大于mid的数的个数了。

同样以mid=8举例,走法如下:

走法可以总结如下:

  • 初始位置在matrix[n-1][0] (即左下角);
  • 设当前位置为matrix[i][j], 若matrix[i][j] <= mid, 则将当前所在列的不大于mid的数的数量(即i+1)累加到答案中,并向右移动,否则向上移动;
  • 不断移动,直到走出格子为止。

可以发现,这样的走法时间复杂度为O(n),即我们可以线性的计算对于任意一个mid,矩阵中有多少数不大于它。这满足了二分查找的性质。

不妨设答案为x, 那么可以直到l<=x<=r, 这样就确定了二分查找的上下界。

对于每次猜测的答案mid, 计算矩阵中有多少数不大于 mid:

  • 如果数量不少于k, 那么说明最终答案不大于mid;
  • 如果数量小于k, 那么说明最终答案大于mid.

这样我们就可以计算出最终的结果x了。

时间复杂度: O(nlogn)

额外空间复杂度: O(1)

class Solution {public int kthSmallest(int[][] matrix, int k) {int h = matrix.length, w = matrix[0].length;int l = matrix[0][0], r = matrix[h-1][w-1];while (l < r) {int mid = l + (r-l)/2;if (check(matrix, mid, k)) {r = mid;} else {l = mid+1;}}return l;}public boolean check(int[][] matrix,int mid, int k) {int i = matrix.length-1, j = 0;int count = 0;while (i >=0 && j < matrix[0].length) {if (matrix[i][j] <= mid) {count += i+1;j++;} else {i--;}}return count >= k; }
}

http://www.wangmingla.cn/news/24663.html

相关文章:

  • 做推广有什么好网站seo每日一贴
  • 科汛cms网站栏目限制ip百度官方下载安装
  • 免费的毕业设计网站建设竞价托管如何托管
  • 网络公司网站建设报价谷歌外贸平台叫什么
  • 0基础学网站开发seo关键词怎么选择
  • 网站seo关键词布局百度怎么推广
  • 推广网站的步骤杭州网站免费制作
  • 如何上传网站企业网站seo排名优化
  • 久久建筑网免费下载怎么没有了百度seo新站优化
  • 崇左网站搭建百度网盘网页版入口
  • 建个网站做网络推广要花多少钱优优群排名优化软件
  • ip做网站域名希爱力双效片骗局
  • 一键做网站怎么制作一个自己的网站
  • 凡科做的网站网络推广外包费用
  • 关于网站建设的图片素材网站建设策划书
  • 网站稿件管理发布系统产品推广方式及推广计划
  • 统计网站怎么做厦门网络推广培训
  • 孝感哪家做网站的公司好焊工培训心得体会
  • 个人博客网站建设seo搜索引擎优化实训报告
  • 网站系统 建设和软件岗位职责湖南今日新闻最新头条
  • 爱站工具想说超人下拉系统百度站长平台链接
  • 做网站到哪里做seo服务外包报价
  • 手机发布会广州网络seo优化
  • 网站建设子目录怎样创建网站平台
  • html5电影网站如何做35个成功的市场营销策划案例
  • 辽宁建设工程信息网、seo一个月赚多少钱
  • 微信网站开发平台百度企业官网
  • 临沂企业建站系统福建seo顾问
  • 货到付款网站制作常熟网络推广
  • 南京外包公司优质的seo快速排名优化