一、思路
先轮转整个数组,再把前后两部分分别轮转
二、code
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n=nums.size();
k %= n;//保证k<n
for (int left=0,right=n-1;left<right;++left,--right){
swap(nums[left],nums[right]);//交换
}
for (int i=0,j=k-1;i<j;++i,--j)
{
swap(nums[i],nums[j]);
}
for (int a=k,b=n-1;a<b;++a,--b)
{
swap(nums[a],nums[b]);
}
}
};
or
class Solution {
public:
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());
}
};
=========================================================================
学到的知识:
①reverse和swap:
reverse
和 swap
是 C++ 标准库中的两个函数,用于不同的操作。
-
reverse
:reverse
函数用于反转容器(如数组、向量等)中元素的顺序。它接受两个迭代器作为参数,用于指定要反转的范围。调用reverse
函数后,指定范围内的元素顺序将被反转。例如,
reverse(nums.begin(), nums.end())
可以用来反转整个数组nums
。 -
swap
:swap
函数用于交换两个变量的值。它接受两个参数,分别是要交换的两个变量。调用swap
函数后,这两个变量的值会互相交换。例如,
swap(a, b)
可以用来交换变量a
和b
的值。
总结来说,reverse
用于反转容器中元素的顺序,而 swap
用于交换两个变量的值。它们的用途和操作对象是不同的。