如何计算此实现的时间复杂度

时间:2016-08-01 07:25:03

标签: time-complexity big-o

 boolean isUnique(String s){
        char [] temp = s.toCharArray();

        for(int i = 0; i < temp.length; i++){
            for(int j = i+1; j < temp.length; j++){
                if(temp[i] == temp[j]){
                    return false;
                }
            }
        }

        return true;
    }

这只是检查字符串中的所有字符是否都是唯一的。 我从其他示例中了解到,内部循环通常为O(n ^ 2),但在这种情况下,内部循环不会从索引0开始。无论temp[i]是什么,它都从下一个元素开始。所以我有点混淆如何确定时间复杂度。

2 个答案:

答案 0 :(得分:2)

外循环的第一次迭代中的比较次数为n。在第二个中它是n-1,依此类推到0.所以我们有一个总和:

n + (n - 1) + (n - 2) + ... + 1

等于

n * (n + 1) / 2 

(n^2 + n) * 1/2

因为1/2只是常数而且n^2的增长速度比n快,我们会考虑O(n^2)的复杂性。

答案 1 :(得分:2)

对此有一个很好的符号解释 假设两个循环都从0开始说8 temp.length,然后以这种方式将其可视化

O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O

在此计算o的数量,它们总和为o(n^2)

现在来看你的情况 外循环从0开始,内循环从那一直持续到每次结束,所以

0 0 0 0 0 0 0 0 // 0+7
0 0 0 0 0 0 0   // 1+6
0 0 0 0 0 0    //2+5
0 0 0 0 0      //3+4
0 0 0 0       //4+3
0 0 0        // 5+2
0 0          //6+1
0            //7+0

在此计算0的数量,它们是(n^2)/2o(n^2)本身

第一列表示外部循环,之后表示内部循环的迭代次数

解释//First loop count + second loop iterations