繁体   English   中英

如何找到大小为k的所有子数组的第n个最小值/最大值(滑动窗口问题)

[英]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)

  • 您需要平衡的BST(例如红黑树)来维持此时间的复杂性。 如果您来自Codeforce或Hackerrank之类的在线评委,请记住,他们经常会提供不生成简明BST的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM