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

嘉峪关网站seo.net 门户网站

嘉峪关网站seo,.net 门户网站,软件开发培训费用,福建省建设厅网站电脑板题目信息 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.yayakq.cn/news/845577/

相关文章:

  • 南岗哈尔滨网站建设wordpress没有文章导航
  • 什么是电子商务网站建设南昌网站seo费用
  • 厦门网站建设有限公司怎么样网店运营教学
  • 瓜果类网站建设方案线上少儿编程课哪个机构最好
  • 四川省住房和城乡建设厅官方网站更改网站文章上传时间
  • 搭建网站赚钱nginx与WordPress
  • 新农村建设管理网站瀑布流网站
  • 建设部安全员证书查询网站微信网站api
  • 珠海网站定制开发女教师遭网课入侵视频大全播放
  • 电脑版网站建设合同范本单页设计费一般多少钱
  • 做维修广告在哪个网站网站内容怎么编辑
  • 陕西省建设厅执业资格注册中心网站昆明网络优化
  • 黄浦网站建设公司帮做网站制作挣钱
  • 九亭镇村镇建设办官方网站做商城网站合作合同
  • 好看开源企业网站模板wordpress ses插件
  • 网站的说服力源码怎么做成app软件手机版
  • 服装手机商城网站建设遵义做网站推广
  • 建在线教育网站需要多少钱wordpress主题酷
  • 做网站需要买服务器重庆平台网站建设平台
  • 怎样做无水印视频网站html企业网站主页模板
  • 网站建设公司岗位建设网站的工作总结
  • 公司网站建设及推广网站建设公司普遍存在劣势
  • 网站开发用什么工具深圳工商注册公司流程
  • 没有备案网站可以做优化么wordpress做知识管理系统
  • 宁波seo教程行业推广seo按天计费系统源码
  • 报考大专网站肇庆本地wordpress上传
  • 网站做跳转的要求网络营销推广方法公司推荐
  • 不用下载直接浏览的网站网站制作报价表
  • 石家庄网站制作谷歌浏览器安卓下载
  • 小程序网站建设微官网和移动网站区别吗