关于Big-O符号的Java/Jsp编程测验

关于Big-O符号的Java/Jsp编程测验,java,algorithm,big-o,Java,Algorithm,Big O,问题:给定:整数列表(允许重复);和整数N。从列表中删除重复项,并在修改后的列表中找到第N个最大的元素。实现至少两种不同的解决方案,以在大O表示法中找到具有O(N*log(N))平均时间复杂度的第N个最大元素,其中N是列表中的元素数 根据我的理解,我可以在提供的整数列表上使用合并排序、堆排序、快速排序和重复项来查找第N个最大的元素,其平均时间复杂度为O(N*log(N)),用Big-O表示法表示。对吗 另外,列表中的重复项呢?我只需在上述算法中添加一行额外的代码来删除重复项,这不会影响O(N*l

问题:给定:整数列表(允许重复);和整数N。从列表中删除重复项,并在修改后的列表中找到第N个最大的元素。实现至少两种不同的解决方案,以在大O表示法中找到具有O(N*log(N))平均时间复杂度的第N个最大元素,其中N是列表中的元素数

根据我的理解,我可以在提供的整数列表上使用合并排序、堆排序、快速排序和重复项来查找第N个最大的元素,其平均时间复杂度为O(N*log(N)),用Big-O表示法表示。对吗

另外,列表中的重复项呢?我只需在上述算法中添加一行额外的代码来删除重复项,这不会影响O(N*log(N))的平均时间复杂度,因为合并排序、堆排序、快速排序只会对列表进行排序,而不会删除重复项

我不是在寻找任何代码,只是关于如何继续这个问题的提示和想法?我正在使用Java,Java中是否有任何预定义的类/方法可以用来完成任务,而不是我自己编写合并排序、堆排序和快速排序


我的目标是完成这项任务,记住O(N*log(N))的平均时间复杂度

首先对列表进行排序,然后删除列表上的文盲以查找所有重复项。第二种方法可能是对所有元素进行循环,并保留一个树结构,其中对于每个元素,您首先检查它是否已经存在于树结构O(log(n))中,如果是删除它,则将其添加到树结构O(log(n))。这使得整个算法成为O(n(log(n))。

因为您添加了java作为标记:

List<Integer> listWithoutDuplicates = new ArrayList(new TreeSet(originalList));
List List without duplicates=new ArrayList(new TreeSet(originalList));
这将构造一个新的排序列表,没有重复项。关于时间复杂度,这加起来就是O(n*logn)(用n个元素构建二元平衡树的复杂度)。作为奖励,您可以尝试用LinkedHashSet替换TreeSet,以保持元素的顺序(在重复项中,我认为最后一个保留)

关于最后一部分,按索引删除元素是很简单的


当然,如果是家庭作业问题,您可能需要实现自己的红黑树才能得到相同的结果。

这个问题似乎离题了,因为它是家庭作业。您的问题中有太多不同的
N
。@Henry我认为所有的N都是表中的项目数list@Thijser但还有第N大元素。我希望这能消除混淆.... 整数列表:5,9,5,2,3,1,4 N:2。删除重复项后,列表将变为5,9,2,3,1,4,因此答案为5,因为5是修改列表中的第二大元素。