Có hai cách để có giải pháp cho vấn đề:
1. Đảo ngược một mảng trong không gian.
Bước 1. Hoán đổi các yếu tố ở đầu và chỉ mục kết thúc.
Bước 2. Tăng chỉ số bắt đầu giảm chỉ số kết thúc.
Bước 3. Lặp lại Bước 1 và Bước 2 cho đến khi bắt đầu chỉ mục <chỉ mục kết thúc
Đối với điều này, độ phức tạp thời gian sẽ là O (n) và độ phức tạp không gian sẽ là O (1)
Mã mẫu để đảo ngược một mảng trong không gian giống như:
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. Đảo ngược một mảng bằng cách sử dụng một mảng phụ trợ.
Bước 1. Tạo một mảng mới có kích thước bằng với mảng đã cho.
Bước 2. Chèn các phần tử vào mảng mới bắt đầu từ chỉ mục bắt đầu, từ mảng đã cho bắt đầu từ chỉ mục kết thúc.
Đối với điều này, độ phức tạp thời gian sẽ là O (n) và độ phức tạp không gian sẽ là O (n)
Mã mẫu để đảo ngược một mảng với mảng phụ trợ giống như:
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;
}
Ngoài ra, chúng ta có thể sử dụng API Bộ sưu tập từ Java để thực hiện việc này.
API Bộ sưu tập trong nội bộ sử dụng cùng một cách tiếp cận ngược lại trong cách tiếp cận không gian.
Mã mẫu để sử dụng API Bộ sưu tập giống như:
public static Integer[] reverseAnArrayWithCollections(Integer[] array) {
List<Integer> arrayList = Arrays.asList(array);
Collections.reverse(arrayList);
return arrayList.toArray(array);
}