[抄题]:

在一个排序矩阵中找从小到大的第 k 个整数。

排序矩阵的定义为:每一行递增,每一列也递增。

[思维问题]:

不知道应该怎么加,因为不是一维单调的。

[一句话思路]:

周围两个数给x或y挪一位, 如果hash数组没有就添加到minheap中

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. class Pair(没有参数)中要有数据类型、方法Pair(int x , int y, int val)
  2. PairComparator 继承了 Comparator<Pair>类 里面自然就是对pair进行比较, 接口<内容物>+名 = new 内部结构名<内容物>。Queue xx = new PQ<Integer>(k,新建pair对象) 0,0,matrix[0][0] 也要新建对象 new Pair
  3. x坐标用dx表示, 里面只有0,1
  4. 取出数从i = 1开始,不用从0开始。因为第一个符合条件的pair是(0,0,matrix[0][0])。
  5. 数组不包括,直接用!hash[x][y]即可

[二刷]:

  1. class关键字是小写开头
  2. next_pair新建之后,minheap直接add(next_pair)即可
  3. dx,dy数组的作用是加一位坐标,因此里面有东西:0 或 1

[三刷]:

  1. paircomparator类是继承来的,别的地方可以用,所以写class

[四刷]:

[五刷]:

[总结]:

[复杂度]:Time complexity: O(klgk) Space complexity: O(k)

[英文数据结构,为什么不用别的数据结构]:

heap符合每次取顶 丢掉,取到k个为止

[其他解法]:

二分法

[Follow Up]:

[LC给出的题目变变变]:

373. Find K Pairs with Smallest Sums 也是用minheap实现取最小

668. Kth Smallest Number in Multiplication Table 看着像用heap,其实用二分法 玩数学

719. Find K-th Smallest Pair Distance 其实用二分法 玩数学。看来二分法也能用于查找最小的第k个数

public class Solution {
/*
* @param matrix: a matrix of integers
* @param k: An integer
* @return: the kth smallest number in the matrix
*/
public int kthSmallest(int[][] matrix, int k) {
class Pair {
int x,y,val;
public Pair(int x,int y,int val) {
this.x = x;
this.y = y;
this.val = val;
}
};
class PairComparator implements Comparator<Pair>{
public int compare(Pair a,Pair b) {
return a.val - b.val;
}
};
int m = matrix.length;
int n = matrix[0].length;
int[] dx = new int[]{0,1};
int[] dy = new int[]{1,0};
boolean[][] hash = new boolean[m][n];
Queue<Pair> minHeap = new PriorityQueue<Pair>(k,new PairComparator());
minHeap.add(new Pair(0,0,matrix[0][0]));
for (int i = 1; i < k; i++) {
Pair cur = minHeap.poll();
for (int j = 0; j < 2; j++) {
int next_x = cur.x + dx[j];
int next_y = cur.y + dy[j];
Pair next_Pair = new Pair(next_x,next_y,0);
if (next_x < m && next_y < n && !hash[next_x][next_y]) {
next_Pair.val = matrix[next_x][next_y];
hash[next_x][next_y] = true;
minHeap.add(next_Pair);
}
}
}
return minHeap.peek().val;
}
}

排序矩阵中的从小到大第k个数 · Kth Smallest Number In Sorted Matrix的更多相关文章

  1. lintcode-401-排序矩阵中的从小到大第k个数

    401-排序矩阵中的从小到大第k个数 在一个排序矩阵中找从小到大的第 k 个整数. 排序矩阵的定义为:每一行递增,每一列也递增. 样例 给出 k = 4 和一个排序矩阵: [ [1 ,5 ,7], [ ...

  2. [LintCode] Kth Smallest Number in Sorted Matrix 有序矩阵中第K小的数字

    Find the kth smallest number in at row and column sorted matrix. Have you met this question in a rea ...

  3. 找到排序矩阵中从小到大第K个数字

    一 题目描述 在一个排序矩阵中找从小到大的第 k 个整数. 排序矩阵的定义为:每一行递增,每一列也递增. 二 题解 由于排序矩阵中的每一行都是递增的,并且每一列都是递增的.从小到大第k个数,实际上就是 ...

  4. python 判断矩阵中每行非零个数的方法

    python 判断矩阵中每行非零个数的方法: # -*- coding: utf-8 -*- # @Time : 2018/5/17 15:05 # @Author : Sizer # @Site : ...

  5. [LeetCode] Kth Smallest Number in Multiplication Table 乘法表中的第K小的数字

    Nearly every one have used the Multiplication Table. But could you find out the k-th smallest number ...

  6. [Swift]LeetCode668. 乘法表中第k小的数 | Kth Smallest Number in Multiplication Table

    Nearly every one have used the Multiplication Table. But could you find out the k-th smallest number ...

  7. LeetCode1337矩阵中最弱的K行

    题目 给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示. 请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序. 如果第 i 行的军人数量少于第 ...

  8. 找出一堆数中最小的前K个数

    描写叙述: 给定一个整数数组.让你从该数组中找出最小的K个数 思路: 最简洁粗暴的方法就是将该数组进行排序,然后取最前面的K个数就可以. 可是,本题要求的仅仅是求出最小的k个数就可以,用排序能够但显然 ...

  9. matlab求一个矩阵中各元素出现的个数(归一化)

    function [m,n] = stamatrix(a) %网上找到的方法,感觉很巧妙 x=a(:); x=sort(x); d=diff([x;max(x)+1]); count = diff(f ...

随机推荐

  1. gradle使用心得

    gradle是语言式构建,和maven配置型还是差别挺大,琢磨了2天 1.在解析setting.gradle之后,开始解析build.gradle之前,这里如果要干些事情(更改build.gradle ...

  2. Fix-Dell iDRAC 7 error: RAC0218: The maximum number of user sessions is reached

    Hi Everyone, We came across the following error while performing some preventative maintenance check ...

  3. BCGcontrolBar(五) 对话框大小改变控件自动适应

    改变控件大小 首先在 构造函数中加入 EnableLayout(); 在OnInitDialog()函数中加入 CBCGPStaticLayout* pLayout = (CBCGPStaticLay ...

  4. JVM内部细节之三:字符串及字符串常量池

    本人最近正在面试,然后注意到总是有公司喜欢考String的问题,如字符串连接有几种方式,它们之间有什么不同等问题:要不就是给一段代码问创建了几个对象.那么该不该问呢?我认为当面试有一定工作经验的求职者 ...

  5. Maven 添加jdk编译插件

    问题描述: 默认情况下,eclipse的maven项目使用jdk1.5编译,而我们的jdk为1.8每次更改jdk1.5之后,只要maven项目已更新,eclipse就会自动的回到jdk1.8结局方法: ...

  6. 全国城市空气质量实时数据(PM2.5)实时下载

    国家公布了“http://113.108.142.147:20035/emcpublish/”空气质量实时发布平台,WCF服务地址为“http://113.108.142.147:20035/EnvP ...

  7. spark 应用程序部署工具 spark-submit

    打包 Spark application 使用spark-submit启动Spark application spark-submit usage spark-submit option 运行模式相关 ...

  8. IIS7根据PID查找对应的站点

    runas /user:administrator cmd cd \Windows\System32\inetsrv appcmd.exe list wp

  9. PS制作gif动图教程

    之前做过一些动图,时间久了就忘记了,每次心血来潮想做的时候又要重新找资料,网上的教程都不够完整,因此整理了一份完整的教程,针对PS新手(对,没错,就是博主自己哈哈). 准备工作:photoshop.图 ...

  10. Helm 入门安装指南

    Helm 是 Kubernetes 生态系统中的一个软件包管理工具.本文将介绍 Helm 中的相关概念和基本工作原理,并通过一个具体的示例学习如何使用 Helm 打包.分发.安装.升级及回退 Kube ...