【发布时间】:2018-01-18 08:10:00
【问题描述】:
假设我有一个这样的数组:[ 1, 2, 3, 4, 5, 6, 1]
我想获得类似 1 ==> 6 的输出(对于元素 1(0th 索引,匹配在索引 6 处找到)
这意味着对于第 0th 元素,下一个匹配项将在第 6 个索引处找到。
如果输入为[4,6,4,6],则输出为 4 ==> 2 和 6 ==> 3
因为 4 的第一个匹配项在索引 2(即 4)处找到,而 6 的第一个匹配项(2nd 元素)在 3rd 索引处找到
如果时间复杂度为 O(n2),则解决方案非常简单。我试图使用堆栈在 O(n) 中找到具有此代码的下一个最大元素。但是我找不到对下一个相等元素执行相同操作的方法。
import java.util.Scanner;
import java.util.Stack;
public class NextGreatestElement {
public static void main(String[] args) {
int[] inp = {1,4,6,2,39};
Stack<Integer> stack = new Stack<>();
stack.push(inp[0]);
for (int i = 1; i < inp.length; i++) {
int element = inp[i];
if (element > stack.peek()) {
System.out.println(stack.peek() + " ==> " + element);
stack.pop();
while (!stack.isEmpty()) {
System.out.println(stack.pop() + " ==> " + element);
}
stack.push(element);
} else if (element < stack.peek()) {
stack.push(element);
}
}
while (!stack.isEmpty()) System.out.println(stack.pop() + " ==> " + (-1));
}
}
即使是算法也足够了。我不需要代码。
【问题讨论】:
-
next greatest element是什么意思? -
对于这个输入 [1, 2, 3, 4, 5, 6, 1] 下一个最大的元素是 1 它是 2 和 2 它是 3 等等,对于六个什么都没有
-
您可以实现的最佳复杂度是 O(nlogn),使用快速排序对数组进行排序,然后遍历它以找到数组中没有更大后继的元素。
-
@bharath 说真的,无法理解您的问题。请提供一组输入和输出
-
不,我不想要所有重复值的索引。我只想要下一个重复的索引:/
标签: java arrays algorithm data-structures stack