确定字符串是否包含至少1个可重复的字符。
(暗示该字符串只能包含基本的ASCII字母:128个字符)。
bool hasRepeatableChar(String str) {
if (str.length() > 128) {
return true;
}
str = str.sort();
for (int i = 0; i < str.length()-1; i++) {
if (str[i] == str[i+1]) {
return true;
}
}
return false;
}
我可以看到,它是:
但是什么是摊销的大O值?
P.S。
它也可以通过使用某种数据结构(例如map)来完成,而不是对它进行排序,它会减少对O(n)的操作量,但会增加内存成本。无论如何,这与问题无关。
答案 0 :(得分:7)
严格地说,此算法的时间复杂度为O(1)
,因为操作数T(n)
不依赖于输入的大小(足够大n
)并且是受到一定数量的操作的限制。
答案 1 :(得分:3)
算法的amortized analysis应该基于预期的输入。
在你的情况下 - 没有任何关于预期输入长度分布的任何先验知识 - 你可以说没什么。
换句话说 - 术语&#34;摊销的复杂性&#34;没有关于输入的假设对你的算法没有多大意义。