Задача задана two sorted Arrays
, найти median
из двух в O(log n)
. слияние отсортированных массивов и поиск медианы (при n/2) должны работать. Но это O(n)
времени, я думаю, и для этого требуется вспомогательное хранилище. Я нашел это pseudocode (проблема 2 в pdf). когда я реализую этот код, я получаю stackoverflow exception
. Вот мой код:найти медиану из двух отсортированных массивов - я получаю исключение из stackoverflow
public static int quickMedian(int[] arr1, int[] arr2, int startArr1, int endArr1, int startArr2, int endArr2){
int m1=(endArr1-startArr1)/2;
int m2=(endArr2-startArr2)/2;
if (arr1[m1]==arr2[m2])
return arr1[m1];
if (arr1[m1]<arr2[m2])
return quickMedian(arr1, arr2, m1, endArr1, startArr2, m2);
else
return quickMedian(arr1, arr2, startArr1, m1, m2, endArr2);
}
public static void main (String[] args){
int[] arr1={1,3,5,7};
int[] arr2={2,4,6,8};
int[] arr3={1,2,4,6,8,10,11};
System.out.println(quickMedian(arr1, arr2, 0, arr1.length-1, 0, arr2.length-1));
}
мне нужна помощь фиксации stackoverflow exception
и сделать эту работу. Благодарю.
Можете ли вы показать нам ввод вашего запуска? Я не понимаю, как этот метод мог бы работать, если элементы в 'arr1' не пересекаются с элементами в arr2. Кроме того, не будет медианным быть на '(start + end)/2' not' (end-start)/2'? – AndyG
@AndyG: Вход, который я запускаю, приводится в основном методе выше. псевдокод в ссылке выше вычисляет медиану таким образом. –
, тогда мой оригинальный пункт стоит.В массивах нет общего элемента, поэтому как ваш базовый случай 'if (arr1 [m1] == arr2 [m2])' когда-либо возвращал true? – AndyG