Java 使用TreeSet的解决方案的时间复杂度是多少?

Java 使用TreeSet的解决方案的时间复杂度是多少?,java,time-complexity,treeset,red-black-tree,Java,Time Complexity,Treeset,Red Black Tree,我已经在Java中使用TreeSet实现了一个问题的解决方案。对于大小为m的数组中提供的每个元素,我将该元素添加到集合中,然后读取其上一个和下一个值 因此,对于大小为m的未排序数组中的每个元素: 我将元素添加到树中:t\u set.add(number) 然后,我从树中读取添加元素的下一个和上一个值: 其中t_set是树集 因为所有3个操作都是log(n)——其中n是树中的节点数——我认为我的每个输入的时间复杂度是3*log(n) 现在,如果我是正确的,整个解决方案的时间复杂度是3*m*lo

我已经在Java中使用TreeSet实现了一个问题的解决方案。对于大小为m的数组中提供的每个元素,我将该元素添加到集合中,然后读取其上一个和下一个值

因此,对于大小为m的未排序数组中的每个元素:

  • 我将元素添加到树中:
    t\u set.add(number)
  • 然后,我从树中读取添加元素的下一个和上一个值:
其中t_set是树集

因为所有3个操作都是log(n)——其中n是树中的节点数——我认为我的每个输入的时间复杂度是3*log(n)

现在,如果我是正确的,整个解决方案的时间复杂度是3*m*log(n)?我不确定这一点,因为m可能是一个巨大的数字,但n从0开始,随着添加更多项而递增


另外,如果有比树集更有效的结构(数字必须排序),请让我知道。

那么您将所有元素添加到
树集
,然后再次检查并检查两边的元素?您能否提供示例代码来说明您正在做什么?还不完全清楚。常量被删除,所以它只是
O(mlogn)
。我对问题进行了编辑以使其更清楚。所以您不需要从整个未排序的数组中选择上一个和下一个,只需要添加到目前为止的那些数组?无论哪种方式,它都与排序相同-
n*lg(n)
就像对每个
n
元素执行3个
lg(n)
操作一样。。。现在你明白了为什么应用程序的时间复杂度是有限的。是的,我只在树集中检查它们。
prev = t_set.lower(number);
next = t_set.higher(number);