关于找到大小为k的所有子数组的最小值/最大值的参考文献太多,但是如何以最佳方式找到第n个最大值/最小值。 如果只需要找到子阵列的最小/最大,则可以使用具有线性时间复杂度的双端队列解决方案。但是对于第n分钟/最大值,我无法找到解决方案。
注意:n <= k
示例: arr = {7,1,4,20,11,17,15} n = 2,k = 4
输出:4,4,11,15
答案 0 :(得分:2)
我相信您需要的数据结构是经过稍微修改的二叉搜索树(BST),其中每个节点还存储了其子树的大小。
在BST中添加,删除元素或finding nth element都将变为log(K)
*。因此,在将窗口滑动到数组上时,您有3个log(K)
操作,假设给定数组中总共有N
个元素,因此总的时间复杂度为N*log(K)
。