我在Java中有一个链表,比如LinkedList<T> list = new LinkedList<T>();
,我需要最有效地找到最大/最小元素,我该怎么做?
如何使用Collections.max()
函数从链接列表中查找max元素?这个函数的时间复杂度是多少?
答案 0 :(得分:6)
如果您希望它更低,则时间复杂度为O(n)
,例如O(1)
您需要使用不同的数据结构,例如TreeSet。
如何对LinkedList
使用Collections.max()
List<Integer> list = ...
Integer max = Collections.max(list);
答案 1 :(得分:1)
ArrayList<Integer> numbers = new ArrayList<Integer>();
/* fill with values */
Integer max = Collections.max(numbers);
答案 2 :(得分:0)
Java Doc
此方法遍历整个集合,因此需要与集合大小成比例的时间。 (O(n))的
<强>用法强>
public class Test
{
public static void main(String args[])
{
// create an LinkedList object
LinkedList<Integer> list = new LinkedList<Integer>();
// Add elements to LinkedList
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
//Use Max Method
System.out.println(Collections.max(list));
}
}
答案 3 :(得分:0)
您还可以使用stream.max()
来获取LinkedList的最大值
LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1); linkedList.add(2);
linkedList.add(3); linkedList.add(4);
linkedList.stream().max(Integer::compareTo).ifPresent(System.out::println);
Output: 4