我想知道我的算法在这种方法中的确切时间复杂度。我认为它是nlogn,因为它使用arrays.sort;
public static int largestElement(int[] num) throws NullPointerException // O(1)
{
int a=num.length; // O(1)
Arrays.sort(num); // O(1)? yes
if(num.length<1) // O(1)
return (Integer) null;
else
return num[a-1]; // O(1)
}
答案 0 :(得分:2)
你的帖子中似乎与自己完全矛盾。你的方法是O(nlogn)是正确的,但是以下是不正确的:
Arrays.sort(num); // O(1)? yes
如果你是对的,方法将是O(1)!毕竟,序列中的一堆O(1)过程仍然是O(1)。实际上,Arrays.sort()
是O(nlogn),它决定了方法的整体复杂性。
查找数组或集合中的最大元素总是可以是O(n),因为我们可以简单地遍历每个元素并跟踪最大值。
答案 1 :(得分:1)
确实,这是O(nlogn)。 Arrays.sort()使用合并排序。使用此方法可能不是找到最大值的最佳方法。您可以循环遍历数组,而不是比较元素。
答案 2 :(得分:1)
“你的速度只有最慢的跑步者”--Fact
因此,这里重要的运行时操作是您的排序和您通过数组的步进。由于Arrays.sort(num)是一种最有效地对数组进行排序的方法,因此我们可以保证这将是O(nlg(n))(其中lg(n)是n的对数基数2)。这是因为O符号表示最坏情况运行时。此外,阵列的步进需要O(n)。
所以,我们有O(nlgn)+ O(n)+ O(1)+ ...
真正减少到O(2nlg(n))。但是,渐近符号中的系数可以忽略不计。 所以你的运行时如上所述接近O(nlg(n))。