У меня проблемы с поиском решения для этого упражнения:
Given scores, an array of integers representing all test and assignment scores, your task is to return an array of integers where output[i] represents the median grade after all marks up to (and including) scores[i] have been entered. Your instructor is a generous marker, so they always round the median up to the nearest integer.
median* - The median of an N-element sequence is defined as follows: If N is odd, the median is the element which stands in the middle of the sequence after it is sorted. If N is even, the median is the average (mean) of the two "middle" elements of the sequence after it is sorted.
Example
•For scores = [100, 20, 50, 70, 45] the output should be medianScores(scores) = [100, 60, 50, 60, 50].
After each score is entered, the median is recalculated as follows:
◦For [100], the median is 100 since it's the only element.
◦For [20, 100], the median is (20 + 100)/2 = 60 since there's an even number of elements.
◦For [20, 50, 100], the median is 50 (middle element).
◦For [20, 50, 70, 100], the median is (50 + 70)/2 = 60(mean of the two middle elements).
◦For [20, 45, 50, 70, 100], the median is 50 again (middle element).
Input / Output
Я пытался получить рабочий код, пока код работает, если длина массива нечетная, но если даже он возвращает неверный результат;
public static int[] getMedian(int[] arr){
int[] sortedArr = new int[arr.length];
int length = arr.length-1;
int odd = arr.length-1;
int even = arr.length-1;
for(int i=0;i<arr.length;i++) {
sortedArr[length] = arr[i];
Arrays.sort(sortedArr);
if (length % 2 == 0) {
arr[i] = sortedArr[odd];
odd--;
} else {
arr[i] = (sortedArr[even] + sortedArr[even - 1]) / 2;
even--;
}
length--;
}
return arr;
}
Алгоритм работает путем добавления элементов из arr в sortedArr. Элементы сортируются, а затем проверяется, является ли sortedArr четным или нечетным. Если его четное, arr [i] становится средним элементом, если нечетное, arr [i] - это сумма средних элементов, деленная на 2.
Я бы оценил вашу помощь.