当前位置: 首页 > 知识库问答 >
问题:

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

蒋哲
2023-03-14

有这么多参考文献来寻找大小为k的所有子阵列的最小值/最大值,但是如何以最好的可能方式找到第n个最大值/最小值。如果我们必须找到子阵列的最小值/最大值,那么我们可以使用具有线性时间复杂度的deque解决方案。但是对于第n分钟/最长时间,我无法找到解决方案。

注意:n

例如:arr = {7,1,4,20,11,17,15} n=2,k=4

输出:4,4,11,15

共有1个答案

阎咏思
2023-03-14

我相信您需要的数据结构是一个经过修改的二叉搜索树(BST),其中每个节点还存储其子树的大小。

添加、删除元素或在BST中查找第n个元素都变成< code>log(K)*。因此,当在阵列上滑动窗口时,有3个< code>log(K)操作,假设给定阵列中总共有< code>N个元素,则总时间复杂度为< code>N*log(K)。

  • 您需要一个平衡的BST(例如红黑树)来保持这种时间复杂性。如果你来自像Codeforce或Hackerrank这样的在线评委,请记住他们经常会提供会产生退化BST的输入
 类似资料:
  • 我有输入数组A 我想要函数Max(T, A)返回B表示A上的最大值在大小T的前一个移动窗口中 通过使用最大堆跟踪当前移动窗口A[i]到A[it]上的最大值,该算法产生O(N log(T))最坏情况。 我想知道有没有更好的算法?可能是O(N)算法

  • NowCoder 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。 例如,如果输入数组 {2, 3, 4, 2, 6, 2, 5, 1} 及滑动窗口的大小 3,那么一共存在 6 个滑动窗口,他们的最大值分别为 {4, 4, 6, 6, 6, 5}。 解题思路 // java public ArrayList maxInWindows(int[] num, int size)

  • 假设我有一个包含整数的数组。 如何找到大小的子集,使得子集中所有整数对之间的距离,我的意思是它们在最远的距离。 示例:数组和, ,最小距离为10和6之间的<错误的子集: ,最小距离为 ,最小距离为 我想到了一个解决办法: 1) 排序数组2)选择一个[0],现在在数组中查找ceil(a[0])=Y。。。。然后ceil(Y

  • 一、题目 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。 举例说明 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小为3,那么一共存在6个滑动窗口,它们的最大值分别为{4,4,6,6,6,5}。 二、解题思路 如果采用蛮力法,这个问题似乎不难解决:可以扫描每一个滑动窗口的所有数字并找出其中的最大值。如果滑动窗口的大小为k,需要O(k)时间才能找出滑动窗口里的最大值

  • 给定一个数组,求从所有可能的子数组中选择的最小元素和次最小元素的最大和。更正式地说,如果我们写出大小为 这个问题是关于GFG的,但我不理解它的解释。 请任何人给出它在O(n)时间复杂度下的解。