JavaScript实例详解之旋转数组
更新时间:2023-11-10前言
旋转数组是一个常见的问题,在很多编程面试中都会遇到。旋转数组是指将数组中的元素向右移动k个位置,其中k是非负整数。例如,给定一个数组[1, 2, 3, 4, 5, 6, 7]和一个整数k,我们希望将数组向右旋转k个位置后得到[6, 7, 1, 2, 3, 4, 5]。
问题分析
为了解决旋转数组问题,我们可以使用多种方法。以下是其中几种常见的方法:
1. 使用额外的数组
我们可以创建一个新的数组,然后将原数组中的元素按照旋转后的顺序放入新数组中。
function rotateArray(arr, k) { let n = arr.length; let rotated = []; for (let i = 0; i < n; i++) { rotated[(i + k) % n] = arr[i]; } return rotated; } let arr = [1, 2, 3, 4, 5, 6, 7]; let k = 2; let rotatedArr = rotateArray(arr, k); console.log(rotatedArr); // 输出 [6, 7, 1, 2, 3, 4, 5]
2. 数组翻转
另一种解决方法是先将整个数组翻转,然后再翻转前k个元素和后n-k个元素。
function reverseArray(arr, start, end) { while (start < end) { let temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } function rotateArray(arr, k) { let n = arr.length; reverseArray(arr, 0, n - 1); // 整个数组翻转 reverseArray(arr, 0, k - 1); // 前k个元素翻转 reverseArray(arr, k, n - 1); // 后n-k个元素翻转 return arr; } let arr = [1, 2, 3, 4, 5, 6, 7]; let k = 2; rotateArray(arr, k); console.log(arr); // 输出 [6, 7, 1, 2, 3, 4, 5]
总结
通过上述两种方法,我们可以解决旋转数组的问题。第一种方法使用额外的数组来存储旋转后的结果,而第二种方法则利用了数组翻转的特性来达到同样的目的。根据具体的需求和限制条件,我们可以选择合适的方法来解决问题。