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

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

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

样例

给出 k = 4 和一个排序矩阵:

[

[1 ,5 ,7],

[3 ,7 ,8],

[4 ,8 ,9],

]

返回 5。

挑战

使用O(k log n)的方法,n为矩阵的宽度和高度中的最大值。

标签

堆 优先队列 矩阵

思路

利用类似于小顶堆的方法,将排序矩阵 matrix 化为小顶堆,即 matrix[0][0] 为矩阵中最小元素,且矩阵每一行递增,每一列也递增,在取出堆顶元素后,将堆顶元素化为最大值 INT_MAX,然后调整矩阵,使其符合小顶堆定义。如此一来,取出的第 k 个元素即排序矩阵中的从小到大第k个数

code

class Solution {
public:
/**
* @param matrix: a matrix of integers
* @param k: an integer
* @return: the kth smallest number in the matrix
*/
int kthSmallest(vector<vector<int> > &matrix, int k) {
// write your code here
int sizeRow = matrix.size();
if (sizeRow <= 0) {
return 0;
}
int sizeCol = matrix[0].size();
if (sizeCol <= 0) {
return 0;
} int min = 0; for (int i = 0; i < k; i++) {
min = matrix[0][0];
matrix[0][0] = INT_MAX;
adjustMatrix(matrix);
}
return min;
} void adjustMatrix(vector<vector<int> > &matrix) {
int row = 0, col = 0;
while (row < matrix.size() - 1 && col < matrix[0].size() - 1) {
if (matrix[row][col + 1] <= matrix[row + 1][col]) {
swap(matrix[row][col + 1], matrix[row][col]);
col++;
}
else if (matrix[row][col + 1] >= matrix[row + 1][col]) {
swap(matrix[row + 1][col], matrix[row][col]);
row++;
}
}
while (row == matrix.size() - 1 && col < matrix[0].size() - 1) {
if (matrix[row][col] >= matrix[row][col + 1]) {
swap(matrix[row][col + 1], matrix[row][col]);
col++;
}
}
while (col == matrix[0].size() - 1 && row < matrix.size() - 1) {
if (matrix[row][col] >= matrix[row + 1][col]) {
swap(matrix[row + 1][col], matrix[row][col]);
row++;
}
}
}
};

lintcode-401-排序矩阵中的从小到大第k个数的更多相关文章

  1. 排序矩阵中的从小到大第k个数 · Kth Smallest Number In Sorted Matrix

    [抄题]: 在一个排序矩阵中找从小到大的第 k 个整数. 排序矩阵的定义为:每一行递增,每一列也递增. [思维问题]: 不知道应该怎么加,因为不是一维单调的. [一句话思路]: 周围两个数给x或y挪一 ...

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

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

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

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

  4. LeetCode1337矩阵中最弱的K行

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

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

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

  6. LintCode 删除排序链表中的重复元素

    给定一个排序链表,删除所有重复的元素每个元素只留下一个. 样例 给出 1->1->2->null,返回 1->2->null 给出 1->1->2->3 ...

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

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

  8. 51nod 1024 矩阵中不重复的元素

    1024 矩阵中不重复的元素  题目来源: Project Euler 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 一个m*n的矩阵. 该矩阵的 ...

  9. [算法]找到无序数组中最小的K个数

    题目: 给定一个无序的整型数组arr,找到其中最小的k个数. 方法一: 将数组排序,排序后的数组的前k个数就是最小的k个数. 时间复杂度:O(nlogn) 方法二: 时间复杂度:O(nlogk) 维护 ...

随机推荐

  1. 执行mongod其他实例出现的问题

    windows环境下,配置其他mongo实例,会出现一些问题 1.配置路径不对,执行bat文件时出现闪屏 根据提示创建C:\data\db\ 目录(因为mongodb默认在/data/db下创建数据库 ...

  2. .net下redis和rabbitmq简单使用demo

    是参考 一下两篇博文整理了下. Redis:   https://www.cnblogs.com/5ishare/p/6492380.html RabbitMq:   https://www.cnbl ...

  3. Linux 判断系统任务是否正在运行

    #!/bin/bash if ps -ef|grep "php index"|egrep -v grep >/dev/null then >& >> ...

  4. laravel5.5源码笔记(六、中间件)

    laravel中的中间件作为一个请求与响应的过滤器,主要分为两个功能. 1.在请求到达控制器层之前进行拦截与过滤,只有通过验证的请求才能到达controller层 2.或者是在controller中运 ...

  5. nginx 开启phpinfo

    在nginx配置文件中加 location / { //如果是资源文件,则不走phpinfo模式 if (!-e $request_filename){ ewrite ^/(.*)$ /index.p ...

  6. flink 根据时间消费kafka

    经常遇到这样的场景,13点-14点的时候flink程序发生了故障,或者集群崩溃,导致实时程序挂掉1小时,程序恢复的时候想把程序倒回13点或者更前,重新消费kafka中的数据. 下面的代码就是根据指定时 ...

  7. python2.7入门---XML解析

        首先我们先来考虑,什么是XML?XML 指可扩展标记语言(eXtensible Markup Language).XML 被设计用来传输和存储数据.XML是一套定义语义标记的规则,这些标记将文 ...

  8. day1 post验证登录

    用post方式模拟 1.登录抽屉网 2.登录代码 ,URL,Form Data 中的信息写入 # coding=utf-8 #post 登录验证 import requests form_data = ...

  9. Elasticsearch6.2集群搭建

    Elasticsearch6.2集群搭建 2018年04月02日 11:07:45 这个名字想了很久 阅读数:14154    版权声明:本博客为学习.笔记之用,以笔记形式记录学习的知识与感悟.学习过 ...

  10. 初遇python进程

    计算机硬件组成 主板 固化(寄存器,是直接和cpu进行交互的一个硬件) cpu 中央处理器:计算(数字计算和逻辑计算)和控制(控制所有硬件协调工作) 存储 硬盘,内存 输入设备 键盘,鼠标,话筒 输出 ...