Sorun için bir çözüm bulmanın iki yolu vardır:
1. Uzayda bir dizi ters çevirin.
Adım 1. Başlangıç ve bitiş dizinindeki öğeleri değiştirin.
Adım 2. Başlangıç dizinini artırın bitiş dizinini azaltın.
Adım 3. Başlangıç dizini <bitiş dizini olana kadar Adım 1 ve Adım 2'yi yineleyin
Bunun için zaman karmaşıklığı O (n) ve uzay karmaşıklığı O (1) olacaktır.
Uzayda bir diziyi tersine çevirmek için örnek kod şöyledir:
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. Bir yardımcı dizi kullanarak bir diziyi ters çevirin.
Adım 1. Verilen diziye eşit yeni bir boyut dizisi oluşturun.
Adım 2. Başlangıç dizininden başlayarak, belirtilen diziden bitiş dizininden başlayarak öğeleri yeni diziye ekleyin.
Bunun için zaman karmaşıklığı O (n) ve uzay karmaşıklığı O (n) olacaktır
Yardımcı dizi ile bir diziyi tersine çevirmek için örnek kod şöyledir:
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;
}
Ayrıca, bunu yapmak için Java'dan Koleksiyonlar API'sını kullanabiliriz.
Koleksiyonlar API'sı dahili olarak aynı tersi alan yaklaşımını kullanır.
Koleksiyonlar API'sını kullanmak için örnek kod şöyledir:
public static Integer[] reverseAnArrayWithCollections(Integer[] array) {
List<Integer> arrayList = Arrays.asList(array);
Collections.reverse(arrayList);
return arrayList.toArray(array);
}