Не получается решить олимпиадную задачу
Садовод Иван сажал семена каждые N дней, в i-ый день Иван посадил ai семечку. Теперь Иван хочет собрать только самую взросшую пару. Взросшая пара семян (i, j) посаженные в i и j дни соответственно, называется самой взросшей, если |ai - aj| максимально среди возможных пар.
Входные данные:
В первой строке: N - количество дней
Во второй строке: целые числа от a1, a2, a3..., где ai - то, насколько взросло семя
Выходные данные:
Номера дней i и j, в которых семена являются самыми взросшими. Числа i и j лежат в диапазоне от 1 до N. Если таких пар несколько - вывести пару с максимальным значением |i - j|. Обратите внимание, что пара i и j отличается от пары j и i.
Например:
Вход:
6
1 2 1 3 1 3
Выход:
6 1
Вход:
4
2 1 0 -1
Выход:
1 4
Я попытался решить эту задачу, но код работает только для второго входа, но не для первого. Вот код, в чем может быть проблема?
int n = int.Parse(Console.ReadLine());
int[] arr = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
int maxDiff = int.MinValue;
int maxI = 0, maxJ = 0;
for (int i = 0; i < n; i++)
{
for (int j = 1; j < n; j++)
{
int diff = Math.Abs(arr[i] - arr[j]);
if (diff > maxDiff)
{
maxDiff = diff;
maxI = i;
maxJ = j;
}
else if (diff == maxDiff)
{
int dist1 = Math.Abs(maxI - maxJ);
int dist2 = Math.Abs(i - j);
if (dist2 > dist1)
{
maxI = i;
maxJ = j;
}
}
}
}
Console.WriteLine($"{maxI + 1} {maxJ + 1}");
Ответы (1 шт):
Я так понимаю, задача сводится к нахождению минимума и максимума в массиве
Пример
(int i, int j) FindMaxDiff(int[] data)
{
int minLeft = 0;
int minRight = 0;
int maxLeft = 0;
int maxRight = 0;
for (int i = 0; i < data.Length; i++)
{
if (data[i] < data[minLeft]) minLeft = i;
if (data[i] <= data[minRight]) minRight = i;
if (data[i] > data[maxLeft]) maxLeft = i;
if (data[i] >= data[maxRight]) maxRight = i;
}
if (Math.Abs(minLeft - maxRight) < Math.Abs(minRight - maxLeft))
return (minRight + 1, maxLeft + 1);
else
return (minLeft + 1, maxRight + 1);
}
Проверка
Console.WriteLine(FindMaxDiff(new[] { 1, 2, 1, 3, 1, 3 }).ToString());
Console.WriteLine(FindMaxDiff(new[] { 2, 1, 0, -1 }).ToString());
Вывод
(1, 6)
(4, 1)