方法1:简单的对容器的操作 insert 、pop_back()
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n=nums.size();
int tmp;
for(int i=1;i<=k%len;i++)
{
tmp=nums[n-1];
nums.pop_back();
nums.insert(nums.begin(),tmp);
}
}
};
方法2:reverse 函数,其实用STL自带的就可以了。加上头文件#include <algorithm>,但是为了学习,自己写了一个reverse
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int len=nums.size();
if(len<=1||k%len==0) return ;
//开始没看懂,现在明白了,取余的原因就是剪枝,因为k=10与k=3其实是一样的结果
k=k%len;//3
int mid=len-k;//4
reverse(nums,nums.begin(),nums.begin()+mid-1);
reverse(nums,nums.begin()+mid,nums.end()-1);
reverse(nums,nums.begin(),nums.end()-1);
}
//为了理解reverse的本质。自己写一个reverse函数 注意边界值,STL函数的边界值是[first,end) 自己写的是[first,end]
vector<int> reverse(vector<int>& nums,vector<int>::iterator it1,vector<int>::iterator it2)
{
while(it1<it2)
{
int tmp=*it1;
*it1=*it2;
*it2=tmp;
it1++;
it2--;
}
return nums;
}
};