У меня возникли проблемы с определением большого значения этого решения. Я придумал вопрос CTCI. . Сложность пространства должна быть O (1) , но это время выполнения НА)? Это похоже на O (N^2) из-за цикла while. Но цикл while не запускает N раз для каждого элемента внутри цикла for.Пробег и пространственная сложность этого кода
public static int[] missing_two(int [] n){
for(int i=0;i<n.length;i++){
while(n[i]!=i){
int temp=n[i];
n[i]=n[n[i]];
n[temp]=temp;
}
}
}
Может ли 6,0,1,2,3,4,5 быть примером наихудшего случая здесь? Цикл while будет запускаться n раз по первому индексу. и 0 после этого. Следовательно, это не должно быть O (2n) => O (n)?
Вы уверены, что код работает? Я могу разобрать его неправильно, но если 'n [i] == i', то' n [i] == n [n [i]] ', поэтому ваше условие выхода' n [i]! = I + 1' получает вы застряли в бесконечном цикле. – xvan
ahh спасибо, что указал. Вы правы в этом – Nych