Я пытаюсь разработать алгоритм с 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), потому что он не должен обрабатывать сортировку?