[英]how to find nth minimum/maximum of all subarrays of size k (Sliding window problem)
有太多的参考来找到大小为k的所有子数组的最小值/最大值,但是如何以最佳方式找到第n个最大值/最小值。 如果只需要找到子阵列的最小/最大,则可以使用具有线性时间复杂度的双端队列解决方案。 但是对于第n分钟/最大时间,我无法找到解决方案。
注意:n <= k
例如:arr = {7,1,4,20,11,17,15} n = 2,k = 4
输出:4,4,11,15
我相信您需要的数据结构是经过稍微修改的二叉搜索树(BST),其中每个节点还存储了其子树的大小。
在BST中添加,删除元素或找到第n个元素都将成为log(K)
*。 因此,当在数组上滑动窗口时,您有3个log(K)
操作,假设给定数组中总共有N
元素,因此总的时间复杂度为N*log(K)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.