มีสองวิธีในการแก้ปัญหา:
1. ย้อนกลับอาร์เรย์ในพื้นที่
ขั้นตอนที่ 1 สลับองค์ประกอบที่จุดเริ่มต้นและดัชนีสิ้นสุด
ขั้นตอนที่ 2 เพิ่มค่าดัชนีเริ่มต้นลดค่าดัชนีสิ้นสุด
ขั้นตอนที่ 3 ทำซ้ำขั้นตอนที่ 1 และขั้นตอนที่ 2 จนถึงเริ่มดัชนี <สิ้นสุดดัชนี
สำหรับสิ่งนี้ความซับซ้อนของเวลาจะเป็น O (n) และความซับซ้อนของพื้นที่จะเป็น O (1)
โค้ดตัวอย่างสำหรับการย้อนกลับอาร์เรย์ในอวกาศเป็นดังนี้:
public static int[] reverseAnArrayInSpace(int[] array) {
int startIndex = 0;
int endIndex = array.length - 1;
while(startIndex < endIndex) {
int temp = array[endIndex];
array[endIndex] = array[startIndex];
array[startIndex] = temp;
startIndex++;
endIndex--;
}
return array;
}
2. กลับอาร์เรย์โดยใช้อาร์เรย์เสริม
ขั้นตอนที่ 1 สร้างอาร์เรย์ใหม่ที่มีขนาดเท่ากับอาร์เรย์ที่กำหนด
ขั้นตอนที่ 2 ใส่องค์ประกอบในอาร์เรย์ใหม่ที่เริ่มต้นจากดัชนีเริ่มต้นจากอาร์เรย์ที่กำหนดเริ่มต้นจากดัชนีสิ้นสุด
สำหรับสิ่งนี้ความซับซ้อนของเวลาจะเป็น O (n) และความซับซ้อนของพื้นที่จะเป็น O (n)
โค้ดตัวอย่างสำหรับการย้อนกลับอาร์เรย์ด้วยอาร์เรย์เสริมเป็นดังนี้:
public static int[] reverseAnArrayWithAuxiliaryArray(int[] array) {
int[] reversedArray = new int[array.length];
for(int index = 0; index < array.length; index++) {
reversedArray[index] = array[array.length - index -1];
}
return reversedArray;
}
นอกจากนี้เราสามารถใช้ Collections API จาก Java เพื่อทำสิ่งนี้
Collections API ภายในใช้วิธีการย้อนกลับในพื้นที่เดียวกัน
โค้ดตัวอย่างสำหรับการใช้ Collections API เป็นดังนี้:
public static Integer[] reverseAnArrayWithCollections(Integer[] array) {
List<Integer> arrayList = Arrays.asList(array);
Collections.reverse(arrayList);
return arrayList.toArray(array);
}