c# - 下面代码的时间复杂度

标签 c# algorithm big-o

我正在尝试检查以下简单程序的时间复杂度。 该程序用 '%20' 替换字符串中的空格。

  1. 计算空格的循环(O(1) 时间)

        foreach (char k in s)
        {
            if (k == ' ')
            {
                spaces_cnt++;
            }
        }
    
  2. 替换空格的循环(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");

关于c# - 下面代码的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9250299/

相关文章:

algorithm - 成本最小化算法(时间有限)

java - 按位置动态对客户进行分组,限制最大规模

c# - 从另一个函数调用 HTTP 触发的 Azure 函数

c# - 将openCV的vector<Point2f>转换为C#的Collections::Generic::List<Windows::Point>

algorithm - KMP建表算法

c# - 3D 体素网格视线 Bresenham 算法

java - 空间复杂度示例

algorithm - 这个伪脚本的大 O 符号是什么

c# - listview C# 按特定列排序

c# - 为什么对象头大小在 64 位架构中翻了一番?