以下代码的时间复杂度
本文关键字:时间复杂度 代码 | 更新日期: 2023-09-27 18:24:07
我正在尝试检查以下简单程序的时间复杂度。该程序将字符串中的空格替换为 '%20'
。
-
计算空间的循环(O(1( 时间(
foreach (char k in s) { if (k == ' ') { spaces_cnt++; } }
-
用于替换空格的循环(O(n(,其中 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(n)
,而不是O(1)
,因为您正在迭代并执行检查字符串中n
字符。
正如您所说,更换循环需要O(n)
.按顺序执行的两个O(n)
操作的组合复杂度为 O(n)
(常数因子在 Big-O 表示法中被丢弃(。
附言您知道您可以使用一行实现所有代码的等效值吗?
s = s.Replace(" ", "%20");
看起来您正在尝试对字符串进行编码。 如果是这种情况,您可以使用 UrlPathEncode(( 方法。 如果您只是尝试对空格进行编码,请使用 Replace(((如 Douglas 所述(。