c语言编程笔录

首页 >   > 笔记大全

笔记大全

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]

总结

通过上述两种方法,我们可以解决旋转数组的问题。第一种方法使用额外的数组来存储旋转后的结果,而第二种方法则利用了数组翻转的特性来达到同样的目的。根据具体的需求和限制条件,我们可以选择合适的方法来解决问题。