아래의 간단한 프로그램의 시간 복잡성을 확인하려고합니다. 문자열의 공백을 '%20'
으로 바꿉니다. 아래 코드의 시간 복잡도
- 루프는 공간 (O (1) 시간)
foreach (char k in s) { if (k == ' ') { spaces_cnt++; } }
-
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++; } }
(N은 스트링의 크기가 O (N))의 공간을 대체하기 위해 루프를 세는
그래서 "O (n) + O (1)"해결책이라고 추측합니다. 내가 틀렸다면 나를 바로 잡아주세요.
왜 첫 번째 루프 O (1)입니까? –
FYI O (n) + O (1)은 O (n)입니다. –
첫 번째 루프는 물론 O (n)이고 O (n) + O (n) = O (n)입니다. – harold