• 行列有序矩阵求第k大元素


    问题来源:http://www.careercup.com/question?id=6335704

    问题描述:

    Given a N*N Matrix.
    All rows are sorted, and all columns are sorted.
    Find the Kth Largest element of the matrix.

    解答:

    先给出算法的时空复杂度,时间O(k * lg k),空间O(k)。

    算法:为了方便描述不防假设矩阵左上角的元素最小,且k<=n。

    1.  取每行行首元素建立规模为k的最小堆。

    2.  删除堆顶元素,同时将该元素所在行的下一个元素插入最小堆

    3.  循环步骤2,k次即可获得所需元素

    复杂性分析: 第一步建堆时间为O(k * lg k). 第二三步插入删除堆顶元素k次,时间复杂度O(k * lg k).总的复杂度为O(k * lg k).

    正确性分析:

    每次确保删除的元素是整个矩阵中的当前最小元素,故而保证了准确性。

    个人感觉:

    算法还有待修改,毕竟这样找到的是前k大而不仅仅是第k大,做了许多无用功。

  • 相关阅读:
    浅谈Semaphore类
    Python浅谈requests三方库
    191104
    191103
    191102
    191101
    191031
    191030
    191029
    191028
  • 原文地址:https://www.cnblogs.com/xubenben/p/3378932.html
Copyright © 2020-2023  润新知