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]
是什么,它都从下一个元素开始。所以我有点混淆如何确定时间复杂度。
答案 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)/2
,o(n^2)
本身
第一列表示外部循环,之后表示内部循环的迭代次数
解释//First loop count + second loop iterations