反向阵列就位...我的实现有什么问题



我试图在适当的位置反转一个数组,例如给定一个数组[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小于endwhile (start > end)循环永远不会运行,还需要更新startend来交换下一对数字:

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])

最新更新