Мне дали серию неотрицательных целых чисел.
43 18 5 67 1 72 16 17 15 93 38 6 83 10 49 98 7 47 61 52 71 79 82 52 8
Мне нужно сохранить его в массиве m * n из Outside-In . Следующее:
m = 5
n = 5
Затем мне нужно вычислить сумму определенной части 2D-массива. (Я уже выполнил эту часть) .
Мой идеальный подход к хранению чисел:
1. Initialize starti,startj = 0.
2. Initialize endi = m , endj = n.
3. Store the remaining numbers in array[starti][j], where j starts from startj and ends at endj.
4. Store the remaining numbers in array[i][endj], where i starts from starti and ends at endi.
5. Store the remaining numbers in array[endi][j], where j starts from endj and ends at startj.
6. Store the remaining numbers in array[i][endj], where i starts from endi and ends at starti.
7. Decrement endi and endj by 1.
8. Increment starti and start j by 1.
9. Repeat the steps 3 - 8 until the last number is stored.
Вопрос: Есть ли лучший способ решить эту проблему?
Дополнительно: я пытался придумать (но безуспешно) с formula to find where the last element is stored before doing all these operation.
1 ответ
Вот один способ.
Сначала вы можете начать думать рекурсивно
Имейте метод с подписью наподобие `fill (m, n, start_position, direction)
Рекурсивная версия будет выглядеть примерно так
fill(m,n, starting_position, direction) {
// If m=0 or n=0 you have a base case.
// Start at starting position, and fill in the direction.
// Decrement m or n, depending on the direction
// Compute new starting position and direction
// Recursively call fill with the updated m,n, starting_pos, direction
}
Теперь обратите внимание, что этот метод хвостовой рекурсии, и поэтому вы можете избавиться от рекурсии и заменить его циклом while с условием цикла while, полученным из базового случая.
Похожие вопросы
Новые вопросы
arrays
Массив - это упорядоченная линейная структура данных, состоящая из набора элементов (значений, переменных или ссылок), каждый из которых идентифицируется одним или несколькими индексами. Когда вы спрашиваете о конкретных вариантах массивов, используйте вместо них следующие связанные теги: [vector], [arraylist], [matrix]. При использовании этого тега в вопросе, относящемся к языку программирования, пометьте вопрос используемым языком программирования.