📅  最后修改于: 2023-12-03 15:30:06.667000             🧑  作者: Mango
本文将介绍如何在 CPP 中使用循环数组旋转算法。循环数组旋转是一种常见的算法,可以在不使用额外空间的情况下,将数组中的元素旋转到指定位置。在本文中,我们将使用 C++ 来实现该算法。
循环数组旋转是一种基于反转数组元素的算法。该算法的主要步骤如下:
start
,并将其初始化为数组的第一个元素。end
,并将其初始化为数组的最后一个元素。start
所指向的元素和 end
所指向的元素交换。start
的值,减少 end
的值。start
的值大于等于 end
的值。例如,对于数组 [1, 2, 3, 4, 5, 6, 7]
,如果我们将其旋转 3 次,得到的结果为 [5, 6, 7, 1, 2, 3, 4]
。
下面是使用循环数组旋转算法的 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++ 实现了该算法,并介绍了其原理和流程。希望这篇文章能够对初学者了解循环数组旋转有所帮助。