📜  c++ 向右移动数组 - C++ (1)

📅  最后修改于: 2023-12-03 14:59:48.776000             🧑  作者: Mango

C++ 向右移动数组

在C++中,我们可以使用循环和指针等方法来向右移动数组。向右移动数组是将数组中的元素向右移动,即将每个元素向右移动一定的位置,而将最后一个元素移动到数组的开头。

方法一:循环移动

我们可以使用循环将数组中的元素向右移动。具体步骤如下:

  1. 将数组的最后一个元素存储到一个临时变量中。
  2. 从数组的倒数第二个元素开始,将每个元素向右移动一个位置。
  3. 将临时变量赋值给数组的第一个元素。
void rightRotate(int arr[], int n, int k)
{
    for (int i = 0; i < k; i++)
    {
        int temp = arr[n-1];
        for (int j = n-2; j >= 0; j--)
            arr[j+1] = arr[j];
        arr[0] = temp;
    }
}

在这个例子中,数组arr的长度为n,要向右移动k个位置。

方法二:使用指针移动

我们也可以通过指针来移动数组中的元素。具体步骤如下:

  1. 定义一个指向数组最后一个元素的指针。
  2. 从数组的倒数第二个元素开始,将每个元素向右移动一个位置。
  3. 将指针指向数组的第一个元素。
void rightRotate(int arr[], int n, int k)
{
    int* ptr = arr + n-1;
    for (int i = 0; i < k; i++)
    {
        int temp = *(arr + n - 1);
        while (ptr > arr)
        {
            *ptr = *(ptr-1);
            ptr--;
        }
        *arr = temp;
        ptr = arr + n-1;
    }
}

在这个例子中,数组arr的长度为n,要向右移动k个位置。

无论使用哪种方法,向右移动数组的时间复杂度都为$O(n*k)$,其中$n$为数组的长度,$k$为向右移动的位置数,空间复杂度为$O(1)$,因为我们只使用了常量级别的额外空间。