Здравствуйте, у меня возникли проблемы со следующей проблемой, кажется, 1) Не полностью понимаю метод раздел 2) Я не могу точно определить проблему с моим кодом.
Описание проблемы : Найти медиану в массиве из трех или более целых чисел, используя рекурсивное уменьшение и завоевание. Мы будем использовать соглашение о рассмотрении только той части массива, которая начинается с данного индекса и заканчивается в другом. Таким образом, рекурсивный вызов может работать через любую часть массива. Первоначальный вызов передается с индексом 0 и индексом до последнего элемента.
rAcMedian ([2, 1, 3, -2, 8], 0, 4) → 2 РАМЕДИАН ([- 4, 6, 2], 0, 2) → 2 РАМЕДИАН ([4, 2, 48, 1, 50], 0, 4) → 4
Код Дайте мне:
int partition(int[] nums, int begin, int end) {
int splitPos = begin;
int pivotValue = nums[begin];
for(int i=begin+1; i<=end; i++) {
if(nums[i] > pivotValue) {
splitPos++;
swap(nums, i, splitPos);
}
}
swap(nums, begin, splitPos);
return splitPos;
}
void swap(int[] nums, int pos1, int pos2) {
int temp = nums[pos1];
nums[pos1] = nums[pos2];
nums[pos2] = temp;
}
Это мой код:
public int rAcMedian(int[] nums, int begin, int end) {
if (begin < end){
int splitPos = partition(nums, begin, end);
if (splitPos == end/2) return nums[splitPos];
if (splitPos > end/2) return nums[rAcMedian(nums, splitPos+1, end)];
if (splitPos < end/2) return nums[rAcMedian(nums, begin, splitPos-1)];
}
return 0;
}
Когда я запускаю код, я получаю следующие ошибки: