zoukankan      html  css  js  c++  java
  • LeetCode 每日一题 378. 有序矩阵中第K小的元素

    题目描述

    给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。
    请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。

    示例:

    matrix = [
       [ 1,  5,  9],
       [10, 11, 13],
       [12, 13, 15]
    ],
    k = 8,
    
    返回 13。
    

    提示:
    你可以假设 k 的值永远是有效的,1 ≤ k ≤ n2 。

    My Solution

    排序题。用堆,先 push 每行首个元素,pop 时在 push 其所在行的后继,k 次即可。

    class Solution {
     public:
      int kthSmallest(vector<vector<int>>& matrix, int k) {
        const int n = matrix.size();
        priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>> >que;
        vector<int>ptr(n, 0);
        for(int i = 0; i < n; ++i)
          que.push(make_pair(matrix[i][0], i));
        while(--k) {
          auto p = que.top();
          que.pop();
          ptr[p.second]++;
          if(ptr[p.second] < n) {
            int q = matrix[p.second][ptr[p.second]];
            que.push(make_pair(q, p.second));
          }
        }
        return que.top().first;
      }
    };
    
    
  • 相关阅读:
    ES6——Promise
    ES6——generator-yield
    ES6——generator
    JQuery——关于CDN(内容分发网络)
    关于JSON使用要注意的地方
    第7课
    第6课
    第5课
    第4课
    第3课
  • 原文地址:https://www.cnblogs.com/Forgenvueory/p/13222835.html
Copyright © 2011-2022 走看看