我试图在适当的位置反转一个数组,例如给定一个数组[1, 2, 3]
,将其反转为[3, 2, 1]
。
以下是我的实现:
function reverseInPlace(arr) {
var start = 0;
var end = arr.length + 1;
while (start > end) {
var temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
return arr;
};
reverseInPlace([1,2,3])
但每次运行此操作时,结果仍然在[1, 2, 3]
中,而不是在[3, 2, 1]
中。我想知道我的反面怎么了。
您有一些问题:
- CCD_ 5值错误,应为CCD_
- 当检查错误时,您需要检查
start < end
,原始代码位于false
的开头,这就是获得不变数组的原因 - 缺失CCD_ 9的增量和CCD_
function reverseInPlace(arr) {
let start = 0,
end = arr.length - 1;
while (start < end) {
let temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
return arr;
}
console.log(reverseInPlace([1, 2, 3]));
看起来while循环从未执行过。由于您已经启动了var start=0和end=arr.length。在while循环中,start和end也应该更新。
function reverseInPlace(arr) {
var start = 0;
var end = arr.length-1;
while (start < end) {
var temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
end--;
start++;
}
return arr;
};
console.log(reverseInPlace([1,2,3]))
首先,start
小于end
,while (start > end)
循环永远不会运行,还需要更新start
和end
来交换下一对数字:
function reverseInPlace(arr) {
var start = 0;
var end = arr.length - 1;
while (start < end) {
var temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
return arr;
};
var res = reverseInPlace([1,2,3])
console.log(res);
有一种简单的方法可以为使用pop和push-js函数
function reverseInPlace(arr) {
var start = 0;
var end = arr.length;
var new_arr = [];
for(var i = 1; i <= end; i++){
new_arr.push(arr.pop());
}
return new_arr;
};
reverseInPlace([1,2,3])