该算法的大 O 表示法是什么

What would be the Big O notation for this algorithm

判断字符串是否包含至少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),但会增加内存成本。反正和问题无关

严格来说,这个算法的时间复杂度是O(1),因为运算次数T(n)不依赖于输入的大小(对于足够大的n)并且受一些常数操作的限制。

算法的amortized analysis应该基于预期的输入。

在你的情况下——没有任何关于预期输入长度分布的先验知识——你无话可说。

换句话说 - "amortized complexity" 项没有关于输入的假设对你的算法没有多大意义。