私はInterview Bitなぜwhileループは時間の複雑さ全体にO(n)を寄与しないのですか?
問題からこの問題を得た
int j = 0;
for(i = 0; i < n; ++i) {
while(j < n && arr[i] < arr[j]) {
j++;
}
}
whileループがないことを、比較の合計数は、おそらくn以下のn(約ある質問arr
による)。ループはn回実行されます。時間の複雑さはO(n^2)でなければならないのですか?
再:一度*最大でまあ、*:「'while'ループは 'N'に '0'から一回実行されます」。 'j'が' n'に到達しないことも可能です。コードが意図的に誤解を招くように設計されているかどうかはわかりません。一目でそれが何をすべきかを知るのは難しいですが、それは何でも行うためにははるかに明確な方法がないかもしれません。 – ruakh
補遺:私はそれが配列の中で最小の要素を見つけたと信じています。 。 。これちなみに私は、ええ、これを書くための明確な方法があります。それは 'ARR [j]を'アクセスする前にちょうど余分な安全性チェックだと思う 'J
ruakh