В этом коде взято из http://somnathkayal.blogspot.in/2012/08 ... ximum-and- минимум-использование.html
Код: Выделить всё
public int[] maxMin(int[] a,int i,int j,int max,int min) {
int mid,max1,min1;
int result[] = new int[2];
//Small(P)
if (i==j) max = min = a[i];
else if (i==j-1) { // Another case of Small(P)
if (a[i] < a[j]) {
this.max = getMax(this.max,a[j]);
this.min = getMin(this.min,a[i]);
}
else {
this.max = getMax(this.max,a[i]);
this.min = getMin(this.min,a[j]); }
} else {
// if P is not small, divide P into sub-problems.
// Find where to split the set.
mid = (i + j) / 2;
// Solve the sub-problems.
max1 = min1 = a[mid+1];
maxMin( a, i, mid, max, min );
maxMin( a, mid+1, j, max1, min1 );
// Combine the solutions.
if (this.max < max1) this.max = max1;
if (this.min > min1) this.min = min1;
}
result[0] = this.max;
result[1] = this.min;
return result;
}
}
Начальные значения max и min=arr[0 ]=8;
Первый список времени будет разделен на 8,5
Мы вызываем MaxMin с max=8 и min=8, так как i==j-1, мы получим max=8,min =5,
Список следующего времени будет разделен на [3,7],
min1=max1=arr[mid+1]=3,
Мы вызываем MaxMin с max=3 и min=3. Поскольку i равно j-1, мы получим max=7,min=3,
Далее сравнение выполняется между max1,max и min1,min ,
Вот и моя путаница,
Значения max и max1 здесь равны 8 и 7 соответственно,но как???
У нас есть нигде не изменялся max1, тогда как он будет иметь значение 7,
Насколько я понимаю, мы вызвали MaxMin с max=3 и min=3, а затем обновили max =7 и min=3, но мы не вернули эти обновленные значения, тогда как обновились значения max1 и min1,
Я застрял на этом, пожалуйста, объясните.
Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/357 ... r-approach