如何计算此实现的时间复杂度
How to compute time complexity of this implementation
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]
是什么。所以我有点混淆如何确定时间复杂度。
外循环第一次迭代的比较次数为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)
。
对此有很好的符号解释
假设两个循环都从 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)/2
,也就是o(n^2)
本身
第一列代表外循环,后面代表内循环的迭代次数
说明//First loop count + second loop iterations
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]
是什么。所以我有点混淆如何确定时间复杂度。
外循环第一次迭代的比较次数为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)
。
对此有很好的符号解释
假设两个循环都从 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)/2
,也就是o(n^2)
本身
第一列代表外循环,后面代表内循环的迭代次数
说明//First loop count + second loop iterations