Як перевернути масив?
1. Алгоритм двох вказівників
Ідея: Поміняти місцями елементи з початку і кінця масиву, поступово рухаючись до центру.
javascript
function reverseArray(arr) {
let left = 0
let right = arr.length - 1
while (left < right) {
// Міняємо місцями arr[left] і arr[right]
const temp = arr[left]
arr[left] = arr[right]
arr[right] = temp
left++
right--
}
return arr
}
// Приклад:
console.log(reverseArray([1, 2, 3, 4, 5])) // [5, 4, 3, 2, 1]Складність
- Час:
O(n) - Пам'ять:
O(1), без створення нового масиву.
2. Переворот без зміни вихідного масиву
Якщо за умовою не можна змінювати вихідний масив, можна створити новий:
javascript
function reversedCopy(arr) {
const result = []
for (let i = arr.length - 1; i >= 0; i--) {
result.push(arr[i])
}
return result
}
console.log(reversedCopy([10, 20, 30])) // [30, 20, 10]Складність
- Час:
O(n) - Пам'ять:
O(n), новий масив.
3. Через рекурсію (рідше, але часто питають)
javascript
function reverseRecursive(arr, left = 0, right = arr.length - 1) {
if (left >= right) return arr
const temp = arr[left]
arr[left] = arr[right]
arr[right] = temp
return reverseRecursive(arr, left + 1, right - 1)
}
console.log(reverseRecursive([1, 2, 3, 4])) // [4, 3, 2, 1]Рекурсія менш ефективна за пам'яттю (стек викликів), але наочно демонструє логіку "від країв до центру".
Підсумок
| Метод | Змінює масив | Час | Пам'ять | Особливості |
|---|---|---|---|---|
| Два вказівники | Так | O(n) | O(1) | Оптимальний спосіб |
| Цикл з новим масивом | Ні | O(n) | O(n) | Без модифікації оригіналу |
| Рекурсія | Так | O(n) | O(n) | Менш ефективно, але наочно |
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.