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; }
添加回答
举报