gpt4 book ai didi

java - 在 Java 中获取 TreeSet 的 headSet 的时间复杂度是多少?另外,如果我调用 headSet 方法 'n' 次怎么办?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:36:35 26 4
gpt4 key购买 nike

我在做一个 hackerrank 问题,要求我找出使用插入排序对数组进行排序所需的移位次数,而不实际使用插入排序对数组进行排序,否则将是 O(n^2) 时间-复杂!这是我的代码超时了。据我所知,调用 headSet 方法 n 次应该在 O(n logn) 左右。

static class MyComp implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return o1 <= o2 ? -1: 1;
}
}



// Complete the insertionSort function below.
static int insertionSort(int[] arr) {

SortedSet<Integer> set = new TreeSet<>(new MyComp());
int count=0;
for(int i=arr.length-1; i>=0;i--){
set.add(arr[i]);
int pos = set.headSet(arr[i]).size();
// System.out.println(pos);
if(pos>0){
count=count+pos;
}

}

return count;
}

最佳答案

创建耳机的复杂度是O(1)

为什么?

因为耳机不是新的。它实际上是现有集合的 View 。创建一个不涉及复制原始集合,甚至不涉及在集合中查找“绑定(bind)”元素。

因此,执行 N 次是 O(N)

但是,您的代码不是O(N) 的原因是

  set.headSet(someElement).size();

不是 O(1)。原因是 TreeSet 的子集 View 上的 size() 方法是通过计算 View 中的元素来计算的。

(据我所知,这在 javadoc 中没有说明,但您可以通过查看 TreeSetTreeMap 的源代码来推断它。)

关于java - 在 Java 中获取 TreeSet 的 headSet 的时间复杂度是多少?另外,如果我调用 headSet 方法 'n' 次怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56820977/

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