📜  cpp 中的循环数组旋转 - C++ (1)

📅  最后修改于: 2023-12-03 15:30:06.667000             🧑  作者: Mango

CPP 中的循环数组旋转

本文将介绍如何在 CPP 中使用循环数组旋转算法。循环数组旋转是一种常见的算法,可以在不使用额外空间的情况下,将数组中的元素旋转到指定位置。在本文中,我们将使用 C++ 来实现该算法。

算法原理

循环数组旋转是一种基于反转数组元素的算法。该算法的主要步骤如下:

  1. 定义一个指针 start,并将其初始化为数组的第一个元素。
  2. 定义另一个指针 end,并将其初始化为数组的最后一个元素。
  3. 首先将 start 所指向的元素和 end 所指向的元素交换。
  4. 然后增加 start 的值,减少 end 的值。
  5. 重复步骤 3 和 4,直到 start 的值大于等于 end 的值。

例如,对于数组 [1, 2, 3, 4, 5, 6, 7],如果我们将其旋转 3 次,得到的结果为 [5, 6, 7, 1, 2, 3, 4]

CPP 代码实现

下面是使用循环数组旋转算法的 CPP 代码实现:

#include <iostream>
#include <vector>

using namespace std;

void rotate(vector<int>& nums, int k) {
    int n = nums.size();
    k = k % n;
    reverse(nums.begin(), nums.end());
    reverse(nums.begin(), nums.begin() + k);
    reverse(nums.begin() + k, nums.end());
}

int main() {
    vector<int> nums = {1, 2, 3, 4, 5, 6, 7};
    int k = 3;

    rotate(nums, k);

    for (int i = 0; i < nums.size(); i++) {
        cout << nums[i] << " ";
    }

    cout << endl;

    return 0;
}

代码中,我们定义了一个 rotate() 函数来旋转数组,该函数接受一个整数数组 nums 和一个整数 k。在函数中,我们先计算旋转的步数 k,将其对数组长度取余,防止超出数组范围。然后,我们使用 STL 中的 reverse() 函数反转数组元素。具体地,我们将数组整个反转,然后再将数组的前 k 个元素反转,最后将数组剩余的元素再反转。最后,我们在主函数中调用 rotate() 函数,并输出旋转后的数组元素。

总结

循环数组旋转是一种常见的算法,可以在不使用额外空间的情况下,将数组中的元素旋转到指定位置。在本文中,我们使用 C++ 实现了该算法,并介绍了其原理和流程。希望这篇文章能够对初学者了解循环数组旋转有所帮助。