У нас есть задание для поиска минимального элемента отсортированного массива, который впоследствии смещается вправо. Например: [1, 5, 6, 19, 56, 101] становится [19, 56, 101, 1, 5, 6]. Метод должен быть реализован с использованием алгоритма «разделяй и властвуй», и он должен иметь лучшую асимптотическую сложность по времени, чем O (n).
РЕДАКТИРОВАТЬ: я забыл добавить, что элементы в массиве являются уникальными.
Я уже реализовал метод и хотел спросить, лучше ли это, чем O (n), и есть ли способы улучшить мой метод.
public class FindMinimum {
public void findMinimum(int[] arr) {
// the recursive method ends when the length of the array is smaller than 2
if (arr.length < 2) {
return;
}
int mid = arr.length / 2;
/*
* if the array length is greater or the same as two, check if the middle
* element is smaller as the element before that. And print the middle element
* if it's true.
*/
if (arr.length >= 2) {
if (arr[mid - 1] > arr[mid]) {
System.out.println("Minimum: " + arr[mid]);
return;
}
}
/*
* separate the array in two sub-arrays through the middle and start the method
* with those two arrays again.
*/
int[] leftArr = new int[mid];
int[] rightArr = new int[arr.length - mid];
for (int i = 0; i < mid; i++) {
leftArr[i] = arr[i];
}
for (int i = mid; i < arr.length; i++) {
rightArr[i - mid] = arr[i];
}
findMinimum(leftArr);
findMinimum(rightArr);
}
}