Я пытаюсь выяснить время выполнения следующего алгоритма. Я утверждаю, что это O (n), потому что внутренний цикл не зависит от внешнего цикла. Таким образом, мы могли бы иметь O (n) + O (n) = O (2n), который равен O (n) Правильно ли это? Я не уверен, что моя логика правильная, и я не могу понять, как правильно анализировать.Время выполнения алгоритма
Алгоритм находит наибольшие элементы слева от списка элементов. Спасибо!
public static void main(String[] args){
int[] a = {4,3,2,10,4,8,9,1};
int[] p = new int[a.length];
ArrayDeque<Integer> previousIndex = new ArrayDeque<Integer>();
for(int i = 0; i < a.length ; i++){
while (!previousIndex.isEmpty() && a[previousIndex.peek()] <= a[i]){
previousIndex.pop();
}
if (previousIndex.isEmpty()) {
p[i] = 0;
} else {
p[i] = previousIndex.peek();
}
previousIndex.push(i);
}
for(int i = 0; i < p.length ; i++){
System.out.println(p[i]);
}
}
}
Да O (n) + O (n) совпадает с O (n), однако в цикле 'for' имеется цикл' while'. Сколько раз этот цикл может работать? Это может повлиять на ответ. – Matt
Это не полная функция, поэтому на вопрос невозможно ответить. Что должен делать алгоритм? – Gene
@Matt Точно, он может работать n-1 раз – ola