#big-o
Вопрос:
Я просто хочу знать, является ли этот алгоритм O(n).
for(int i=0;i<n;i ){
if(a[i]==0){
temp=a[i];
i ;
while(a[i]!=0){
a[i]=temp;
i ;
}
i--;
}
}
Комментарии:
1. Алгоритм увеличивается
i
без привязки во внутреннем цикле. Это может привести к выходу за пределы массива, что недопустимо.2. Чего пытается достичь этот код?
3. пожалуйста, не забудьте выбрать лучший ответ
Ответ №1:
Да, это O(n). Если все значения in a
не кратны 10, это обычный цикл for. Если while
цикл введен, любые итерации в while
цикле пропускаются в for
цикле, что означает, что они не требуют дополнительного времени. Так что да, это всегда будет O(n).
Тем не менее, я рекомендую не изменять вашу переменную итерации в другом месте, кроме for
объявления. Это делает код трудным для понимания и подверженным ошибкам.