[LeetCode]378. Kth Smallest Element in a Sorted Matrix

来源:互联网 发布:电脑抽奖软件下载 编辑:程序博客网 时间:2024/05/20 11:26


Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth smallest element in the matrix.
Note that it is the kth smallest element in the sorted order, not the kth distinct element.

Example:

matrix = [   [ 1,  5,  9],   [10, 11, 13],   [12, 13, 15]],k = 8,return 13.

解法1:priority_queue<int, vector<int>> 默认顶端数字大.修改顺序可添加greater<int>;

class Solution {public:    int kthSmallest(vector<vector<int> >& matrix, int k) {        int rows=matrix.size();        if(rows==0) return 0;        int cols=matrix[0].size();        if(cols==0) return 0;        priority_queue<int,vector<int> > pq;        int res;        for(int i=0;i<rows;i++){            for(int j=0;j<cols;j++){                pq.push(matrix[i][j]);                if(pq.size()>k){                    pq.pop();                }            }        }        return pq.top();    }};

解法2:利用upper_bound(first,last, num)
这里写图片描述

class Solution {public:    int kthSmallest(vector<vector<int>>& matrix, int k) {        int n = matrix.size();        int le = matrix[0][0], ri = matrix[n - 1][n - 1];        int mid = 0;        while (le < ri) {            mid = le + (ri-le)/2;            int num = 0;            for (int i = 0; i < n; i++) {                int pos = upper_bound(matrix[i].begin(), matrix[i].end(), mid) - matrix[i].begin();                num += pos;            }            if (num < k) {                le = mid + 1;            }            else {                ri = mid;            }        }        return le;    }};

0 0
原创粉丝点击