gpt4 book ai didi

java - Java中集合的时间复杂度

转载 作者:太空狗 更新时间:2023-10-29 22:40:05 25 4
gpt4 key购买 nike

谁能告诉我下面代码的时间复杂度?

a 是一个 int 数组。

Set<Integer> set = new HashSet<Integer>();
for (int i = 0; i < a.length; i++) {
if (set.contains(arr[i])) {
System.out.println("Hello");
}
set.add(arr[i]);
}

我认为它是 O(n),但我不确定,因为它使用 Set 并且它也包含方法。它还调用了 setadd 方法。

任何人都可以确认并解释上面整个代码的时间复杂度是多少?另外,需要多少空间?

最佳答案

我相信它的 O(n) 因为你遍历数组,containsadd 应该是常数时间,因为它是一个 hash基于集。如果它不是基于散列的并且需要对整个集合进行迭代以进行查找,则上限将为 n^2。

整数是不可变的,因此空间复杂度为 2n,我认为这可以简化为 n,因为常数无关紧要。

如果您在数组和集合中有对象,那么您将有 2n 个引用和 n 个对象,所以您有 3n 个,这仍然是线性(乘以常数)空间限制。

编辑——是的“此类为基本操作(添加、删除、包含和大小)提供恒定的时间性能,假设散列函数将元素适本地分散在桶中。”

参见 here .

关于java - Java中集合的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6769523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com