3 回答

TA貢獻1796條經驗 獲得超7個贊
您只需要檢查startis 是否小于 then end。另一個檢查是多余的,因為在end達到零之前,循環停止。
function reverseArrayInPlace(array) {
for (let start = 0, end = array.length - 1; start < end; start++, end--) {
let x = array[start];
array[start] = array[end];
array[end] = x;
}
return array;
}
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];
reverseArrayInPlace(nums);
console.log(nums);

TA貢獻1783條經驗 獲得超4個贊
此代碼將每對元素交換兩次:一次 whenstart < end和一次 when start > end。在您的 if 語句中,您想將中斷條件更改為start < endand not start < array.length。
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];
function reverseArrayInPlace(array) {
for (let start = 0, end = array.length - 1; start < end; start++, end--) {
let x = array[start];
array[start] = array[end];
array[end] = x;
}
return array;
}
reverseArrayInPlace(nums);
console.log(nums);

TA貢獻1827條經驗 獲得超8個贊
只要數組中的值是整數,就可以執行按位異或 (XOR) 而無需臨時變量。你也可以用一個控制變量來做到這一點,即i。時間復雜度為 O(n/2)。
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];
function reverseIntArrayInPlace(arr) {
for (let i = 0; i < Math.floor(arr.length / 2); i++) {
arr[i] = arr[i] ^ arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = arr[i] ^ arr[arr.length - 1 - i];
arr[i] = arr[i] ^ arr[arr.length - 1 - i];
}
return arr;
}
console.log(reverseIntArrayInPlace(nums));
.as-console-wrapper { top: 0; max-height: 100% !important; }
如果你想交換其他類型,那么你將需要一個臨時變量。
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];
function reverseArrayInPlace(arr) {
for (let i = 0; i < Math.floor(arr.length / 2); i++) {
const tmp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = tmp;
}
return arr;
}
console.log(reverseArrayInPlace(nums));
.as-console-wrapper { top: 0; max-height: 100% !important; }
添加回答
舉報