找到最近的索引j,使得A [j]> A [i]

时间:2016-06-07 17:10:56

标签: algorithm data-structures

问题很简单:

给定数组A,对于每个索引i,找到最近的索引j,使得A [j]> A [i]中。如果不存在,则报告-1。输出这些索引按相应的i。

排序

我正在考虑的代码如下,但有更快的算法吗?

// Calculate element closest to the left
for (i = 0; i < n; ++i) {
    while (stack.top() < a[i]) {
        stack.pop();
        stack_pos.pop();
    }

    left[i] = stack.top();
    left_pos[i] = stack_pos.top();
    left_pos = stack_pos.top();
    stack.push(a[i]);
    stack_pos.push(i);
}

// Similarly populate right

// Take closest of left and right
for (i = 0; i < n; ++i) 
{
    closest[i] = closest(left[i], right[i], left_post[i], right_pos[i]);
}

1 个答案:

答案 0 :(得分:0)

扫描阵列并找到所有非峰值元素,找到大于它们的邻居。

对于所有峰值元素,将它们与其原始索引值一起推入另一个数组中。以类似的方式重复上述过程(但考虑到邻居&#39;原始索引)。

我们必须进行最多log(n)次迭代,因为在每个阶段只剩下峰值元素。