📅  最后修改于: 2023-12-03 14:51:14.627000             🧑  作者: Mango
在C ++中,使用vector容器很容易对数组进行旋转操作。 向左旋转数组即将数组中的元素向左移动k个位置,以最左侧的元素为起点,并将超出数组长度的元素放回数组末尾。
#include <iostream>
#include <vector>
using namespace std;
// 向左旋转数组
void leftRotate(vector<int>& nums, int k) {
int n = nums.size();
k %= n; // 防止k大于n的情况
reverse(nums.begin(), nums.begin() + k); // 翻转前k个元素
reverse(nums.begin() + k, nums.end()); // 翻转剩余的元素
reverse(nums.begin(), nums.end()); // 翻转整个数组
}
// 输出数组元素
void printArray(vector<int>& nums) {
for (int i = 0; i < nums.size(); i++) {
cout << nums[i] << " ";
}
cout << endl;
}
int main() {
vector<int> nums = {1, 2, 3, 4, 5, 6, 7};
int k = 3;
cout << "Before rotation: ";
printArray(nums);
leftRotate(nums, k);
cout << "After rotation: ";
printArray(nums);
return 0;
}
代码中,我们首先定义了一个函数leftRotate
,该函数接受一个vector引用nums
和一个整数k
作为输入参数,该函数使用了STL中的reverse函数,具体步骤如下:
最后,我们定义了一个printArray
函数,用于输出数组元素,帮助我们验证旋转是否成功。
通过使用STL中的vector容器和reverse函数,我们可以很容易地对数组进行向左旋转,这种方法的时间复杂度为O(n),其中n是数组元素的数量。