假設我有一個這樣的陣列查找下一次出現的每個元素在陣列:[ 1, 2, 3, 4, 5, 6, 1]
在O(N)
我想獲得像1 ==輸出> 6(對於元件1(0 第索引匹配在索引6)
這意味着0 第元件下一個匹配是在第六指數發現找到。
如果輸入是[4,6,4,6]
輸出是4 ==> 2和6 = => 3
由於用於4第一匹配索引2(其爲四)和第一發現匹配六(2 第二元件)在3 RD索引
發現如果時間複雜度是O(n )解決方案非常簡單。我試圖用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));
}
}
即使算法就足夠了。我不需要代碼。
是什麼'未來最大element'是什麼意思? – Eran
對於這個輸入[1,2,3,4,5,6,1],下一個最大的元素是1,它是2和2,它是3,依此類推,六中沒有什麼是 – bharath
您可以實現的最佳複雜度是O(nlogn),使用快速排序對數組進行排序,然後遍歷它以找到數組中沒有更大後繼的元素。 –