双指针法的工作原理:
-
初始化两个指针:
left指向数组开头(索引0),right指向数组末尾(索引length-1) -
当
left < right时,交换两个指针指向的元素 -
left指针向右移动(left++),right指针向左移动(right--) -
重复步骤2-3,直到两个指针相遇或交错
时间复杂度分析
-
时间复杂度:O(n) - 只需要遍历数组的一半长度(n/2次交换)
-
空间复杂度:O(1) - 原地修改,不需要额外存储空间
这种方法在时间复杂度上已经是最优解,因为必须访问每个元素至少一次才能完成倒序。空间复杂度也是最优的O(1)
const array = Array.from({ length: 100 }, (_, i) => i + 1);
console.log("array", array);
function reverseArrayLike(arr) {
const result = Array.from(arr);
let left = 0;
let right = result.length - 1;
while (left < right) {
[result[left], result[right]] = [result[right], result[left]];
left++;
right--;
}
console.log("result", result);
return result;
}
reverseArrayLike(array);
1