小编Aer*_*ole的帖子

空间复杂性示例

所以我想知道在for循环中何时创建对象(或基元),这对空间复杂性有何影响?

例如,下面是一个代码示例:

public boolean checkUnique(String p){
    int term = -1;
    int len = p.length();
    for (int i =0; i<len; i++) {
        char c = p.charAt(i);
        StringBuilder sb = new StringBuilder(p.substring(0, i));
        sb.append(p.substring(i+1, len));
        String str = sb.toString();
        if (str.indexOf(c) != term) {
            return false; 
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

所以我试图分析这个算法的空间复杂性.它看起来像是O(n).这是我的推理:迭代次数等于输入大小,并且在每次迭代中我们创建一个StringBuilder对象,因此我们创建与输入大小成比例的StringBuilder对象.同样的推理可以应用于我们在每次迭代时创建String对象和char的事实.这个推理是否正确?

我问的原因是因为我遇到了一种算法,在每次迭代后进行以下赋值:

int val = str.charAt(i);
Run Code Online (Sandbox Code Playgroud)

然而,该算法具有O(1)空间复杂度.所以我的理解一定不正确呢?在这种情况下,checkUnique算法的空间复杂度也为O(1).

java algorithm big-o space-complexity

3
推荐指数
1
解决办法
1027
查看次数

标签 统计

algorithm ×1

big-o ×1

java ×1

space-complexity ×1