將 String[] 反轉,**不建立新陣列**,僅使用原陣列空間。
String[] arr = {"A", "B", "C", "D"};
List<String> list = new ArrayList<>(Arrays.asList(arr));
Collections.reverse(list);
for (int i = 0; i < arr.length; i++) {
arr[i] = list.get(i);
}
// arr 變為 {"D", "C", "B", "A"}
public static void reverseInPlace(String[] arr) {
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
String tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
| 方法 | 時間複雜度 | 空間複雜度 | 備註 |
|---|---|---|---|
| Collections.reverse + List | O(n) | O(n) | 程式碼簡潔,適合一般用途 |
| 原地雙指標交換 | O(n) | O(1) | 嚴格符合「不建立新陣列/集合」 |
int[]),同樣適用雙指標交換。Collections.reverse(Arrays.asList(arr)) 但 Arrays.asList 回傳固定大小列表,**支援 set 操作**,可直接反轉寫回原陣列。