📜  在 C++ 中旋转(1)

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

在 C++ 中旋转

在 C++ 中,我们可以通过一些简单的代码来实现旋转操作。旋转操作是指将数组或者向量中的元素按照给定的规则进行移动。常见的旋转规则包括向左或向右移动 k 个位置。下面我们将介绍如何在 C++ 中对数组和向量进行旋转操作。

旋转数组

给定一个数组 nums,将数组中的元素向右移动 k 个位置。

解法一

我们可以使用另一个数组来存储旋转后的结果。具体操作如下:

  1. 定义一个大小为 nums.size() 的新数组 result。
  2. 将 nums[i] 放入 result[(i+k)%nums.size()] 中。
  3. 将 result 中的元素复制到 nums 中。

下面是代码实现:

void rotate(vector<int>& nums, int k) {
    vector<int> result(nums.size());
    for (int i = 0; i < nums.size(); i++) {
        result[(i + k) % nums.size()] = nums[i];
    }
    for (int i = 0; i < nums.size(); i++) {
        nums[i] = result[i];
    }
}
解法二

我们也可以使用反转来实现旋转。具体操作如下:

  1. 反转整个数组。
  2. 反转前 k 个元素。
  3. 反转后 n-k 个元素。

下面是代码实现:

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

给定一个 STL 向量,将向量中的元素向右移动 k 个位置。

解法一

我们可以使用另一个向量来存储旋转后的结果。具体操作如下:

  1. 定义一个大小为 nums.size() 的新向量 result。
  2. 将 nums[i] 放入 result[(i+k)%nums.size()] 中。
  3. 将 result 中的元素复制到 nums 中。

下面是代码实现:

void rotate(vector<int>& nums, int k) {
    vector<int> result(nums.size());
    for (int i = 0; i < nums.size(); i++) {
        result[(i + k) % nums.size()] = nums[i];
    }
    nums = result;
}
解法二

我们也可以使用反转来实现旋转。具体操作如下:

  1. 反转整个向量。
  2. 反转前 k 个元素。
  3. 反转后 n-k 个元素。

下面是代码实现:

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

以上就是在 C++ 中旋转数组和向量的两种方法。如果您有更好的解法或者任何疑问和建议,请随时在评论区留言。