我正在尝试设计一个时间复杂度为 O(1) 的算法,该算法从不是最小值的数组中返回一个值。我知道搜索数组并比较其元素以找到最小的将使算法为 O(n),因此不起作用。
如果我写一个单独的方法,使用排序算法先对数组进行排序,然后返回最小的,这会影响算法的时间复杂度吗?
这是我的代码:
private static int nonSmallestElement(int[] array) {
int smallest = smallestElement(array);
int index = (int) (array.length * Math.random());
System.out.println("Index = " + index);
for (int i = index; i < array.length; i++) {
if (array[i] != smallest) {
return array[i];
}
}
return array[1];
}
private static int smallestElement(int[] array) {
Arrays.sort(array);
return array[0];
}
这里的Arrays.sort()方法是使用双枢轴快速排序算法,它是 O(n log(n))。现在这是否意味着该nonSmallestElement()方法也具有该时间复杂度,还是 O(1) 因为它不必处理排序?
Qyouu
相关分类