Algorithm 这个代码的空间复杂度是多少? public静态布尔值isUniqueChars2(String str){ 布尔[]字符集=新布尔[256]; 对于(int i=0;i

Algorithm 这个代码的空间复杂度是多少? public静态布尔值isUniqueChars2(String str){ 布尔[]字符集=新布尔[256]; 对于(int i=0;i,algorithm,space-complexity,Algorithm,Space Complexity,不计算输入字符串,代码具有O(1)空间复杂度。无论输入如何,它都会消耗恒定的空间量 时间复杂度也是O(1),因为循环执行的步数永远不会超过256步。输入的大小显然是O(n),但此函数的内存要求是O(1),因为数组的大小是恒定的。但是时间复杂度是O(n),因为它在字符串上迭代。它不是。这是O(1)new boolean[str.length()]没有任何意义…@TedHopp——如果他这样做,他的程序将在包含字母“a”的小于65个字符的字符串中崩溃。瞧,这个建议不是教育学的。我现在讨厌课本…因为我

不计算输入字符串,代码具有
O(1)
空间复杂度。无论输入如何,它都会消耗恒定的空间量


时间复杂度也是O(1),因为循环执行的步数永远不会超过256步。

输入的大小显然是O(n),但此函数的内存要求是O(1),因为数组的大小是恒定的。但是时间复杂度是O(n),因为它在字符串上迭代。

它不是。这是
O(1)
new boolean[str.length()]
没有任何意义…@TedHopp——如果他这样做,他的程序将在包含字母“a”的小于65个字符的字符串中崩溃。瞧,这个建议不是教育学的。我现在讨厌课本…因为我读的课本上说它有O(n),我知道它没有,但不确定。。。非常感谢,请大家推荐一个好的空间运动链接complexity@HeathHunnicutt-哎呀。绝对正确。我认为时间复杂度也是O(1):根据编码和特殊编码的存在,不会有超过26个步骤chars@Betlista-当找到第一个重复字符或输入用尽时,函数退出。没有重复字符是最糟糕的情况。(但是,请注意,根据,唯一字符不能超过256个。)从技术上讲,循环必须在256次迭代后退出,与输入字符串无关,因此最坏的情况是O(1)次。
    public static boolean isUniqueChars2(String str) {
        boolean[] char_set = new boolean[256];

        for (int i = 0; i < str.length(); i++) {
            int val = str.charAt(i);
            if (char_set[val])
                return false;

            char_set[val] = true;
        }

        return true;
    }