私は以下の簡単なプログラムの時間複雑さをチェックしようとしています。 プログラムは、文字列内のスペースを'%20'
に置き換えます。以下のコードの時間複雑度
スペース(O(1)時間)
foreach (char k in s) { if (k == ' ') { spaces_cnt++; } }
を(nは文字列のサイズであり、O(n))をスペースを交換するループをカウントするループ
char[] c = new char[s.Length + spaces_cnt * 3]; int i = 0; int j = 0; while (i<s.Length) { if (s[i] != ' ') { c[j] = s[i]; j++; i++; } else { c[j] = '%'; c[j + 1] = '2'; c[j + 2] = '0'; j = j + 3; i++; } }
私はそれが "O(n)+ O(1)"解決策であると推測しています。私が間違っていれば私を修正してください。
なぜ最初のループO(1)ですか? –
FYI O(n)+ O(1)はO(n)です。 –
もちろん、最初のループはもちろんO(n)であり、O(n)+ O(n)= O(n)です。 – harold