码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-06-27 18:30:08      阅读:1000      评论:0      收藏:0      [点我收藏+]

标签:lintcode   面试   

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

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

您在真实的面试中是否遇到过这个题? 
Yes
样例

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

[
  [1 ,5 ,7],
  [3 ,7 ,8],
  [4 ,8 ,9],
]

返回 5

挑战

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

标签 Expand  

相关题目 Expand 


分析:一般这种题都是用一个最大/最小堆,每次取出其中最大/最小的一个,然后把和这个数相关的(比它大/小)数压入堆中,知道找到第k大/小。

代码:

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 n = matrix.size();
        int m = matrix[0].size();
        priority_queue<pair<int,pair<int,int> >,vector<pair<int,pair<int,int> > >,greater<pair<int,pair<int,int>> >> q;
        map<pair<int,int>,bool> visited;
        q.push(make_pair(matrix[0][0],make_pair(0,0)));
        visited[make_pair(0,0)]=true;
        while(k--)
        {
            pair<int,pair<int,int> > cur = q.top();
            if(k==0)
                return cur.first;
            q.pop();
            if(cur.second.first+1<n&&visited[make_pair(cur.second.first+1,cur.second.second)]==false)
            {
                q.push(make_pair(matrix[cur.second.first+1][cur.second.second],make_pair(cur.second.first+1,cur.second.second)));
                visited[make_pair(cur.second.first+1,cur.second.second)]=true;
            }
            if(cur.second.second+1<m&&visited[make_pair(cur.second.first,cur.second.second+1)]==false)
            {
                q.push(make_pair(matrix[cur.second.first][cur.second.second+1],make_pair(cur.second.first,cur.second.second+1)));
                visited[make_pair(cur.second.first,cur.second.second+1)]=true;
            }
        }
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:lintcode   面试   

原文地址:http://blog.csdn.net/wangyuquanliuli/article/details/46661967

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!