所有子阵列/窗口大小为k的最大/最小值(必须阅读接受的答案,新方法)

时间:2013-06-21 11:04:35

标签: c++ arrays algorithm data-structures

给定一个大小为n的数组,即它中有n个元素。和窗口大小'W'。你必须在所有'W'大小的子阵列中找到最大值。从索引0开始。

Sample Input:
n=10 , W = 3 // n is number of element in array and W is window size.

10 3
1 -2 5 6 0 9 8 -1 2 0

Answer = 5 6 6 9 9 9 8 2

我尝试了什么 -   (自我平衡BST)

  1. 选择前k个元素并创建一个大小为W的自平衡二进制搜索树(BST)。
  2. 为i = 0运行循环到n - W.
    1. 从BST获取最大元素并打印出来。
    2. 在BST中搜索arr [i]并将其从BST中删除。
    3. 将arr [i + W]插入BST。
  3. 时间复杂度:

    1. 第1步是O(WLogW).
    2. 步骤2.1,2.2和2.3的时间复杂度为O(LogW)。自从步骤 2.1,2.2和2.3在循环中运行n-W+1 times,时间 完整算法的复杂性为O(WLogW + (n-W+1)*LogW) 也可以写成O(nLogW)
    3. 我的问题是我可以改进吗?关于BST方法的任何建议或我没有听说过的任何其他算法?

      到处都只看到Dequeue Method。没有任何方法吗?

0 个答案:

没有答案