你能不能帮我找到下面代码的Big-O:
/**
* This will:
* 1) Remove duplicates from the give List and sort.
* 2) find N-th largest element in the modified list and return the element.
* @param listWithDup
* @param index index of the largest element
* @return
*/
public static int findElementbyIndex(List<Integer> listWithDup, int index){
int toRet = 0, num = 0;
TreeSet<Integer> sortedSet = new TreeSet<Integer>(listWithDup); // remove duplicates and sorts
// System.out.println("printing the sorted List:");
// for(int i: sortedSet){
// System.out.println(i);
// }
Iterator<Integer> it = sortedSet.descendingIterator();
while(it.hasNext()){
toRet = it.next();
num++;
if(num == index)
break;
}
return toRet;
}
/**
* @param args
*/
public static void main(String[] args) {
ArrayList<Integer> a = new ArrayList<Integer>();
a.add(1);
a.add(9);
a.add(5);
a.add(7);
a.add(2);
a.add(5);
System.out.println("Expecting 7, because 7 is 2nd largest element in the modified list="+findElementbyIndex(a, 2));
}
我从这段代码得到的输出如下:
printing the sorted List:
1
2
5
7
9
Expecting 7, because 7 is 2nd largest element in the modified list=7
我需要计算findElementbyIndex()方法的平均复杂度。 任何人都可以帮助我。
提前致谢
答案 0 :(得分:1)
TreeSet在创建时会进行基于比较的排序,因此它将为O(n log n)。算法的其余部分是顺序搜索,因此是O(n),但由于O(n log n)的复杂度较高,因此算法为O(n log n)。
答案 1 :(得分:0)
最好的情况是,所需的项目在第一个索引中。单词case是所需项目在最后位置。这意味着在最坏的情况下,搜索将遍历每个项目一次。因此,对于N个输入,算法是O(N)。 :)