Чтобы решить эту проблему, нужно создать массив nxn и заполнить этот массив ответом для каждого [i,j]
. Общая идея:
a[] // this is the input array
results = new [n,n]
// this is the same loop structure used for selection sort
for (i = 0; i < n-1; ++i)
{
largest = a[i]
results[i,i] = largest
for (j = i+1; j < n; ++j)
{
if (a[j] > largest)
{
largest = a[j]
}
results[i,j] = largest
}
}
Учитывая массив [1, 2, 5, 3, 4]
, который должен создать:
1, 2, 5, 5, 5
?, 2, 5, 5, 5
?, ?, 5, 5, 5
?, ?, ?, 3, 4
?, ?, ?, ?, 4
Знак вопроса означает, что нам все равно, какие там значения. Если вас спросят значения i и j, вы просто посмотрите вверх results[i,j]
и получите ответ. Потому что i < j
, вы никогда не будете индексировать ячейки с вопросительными знаками.
Таким образом, время инициализации равно O (n ^ 2), а необходимое пространство равно O (n ^ 2).