【题目描述】
Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7]
is rotated to [5,6,7,1,2,3,4]
.
1.每次都是把第n-1个数插入到最前面,最后再将这个vector resize一下就可以了。
2.重新声明一个vector变量tmp,其与nums的元素对应位置为tmp[(i+k)%n]=nums[i],最后再将tmp重赋给nums.但要注意一点,记得初始化vector变量tmp。
3.将数组分成两部分,先roate整个数组,再roate第一部分,最后roate第二部分。
【代码】
思路1:
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n=nums.size();
k=k%n;
int cnt=0;
while(cnt!=k){
nums.insert(nums.begin(),nums[n-1]);
cnt++;
}
nums.resize(n);
}
};
思路2:
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n=nums.size();
vector<int> tmp(n,0);
if(k==0) return;
for(int i=0;i<n;i++){
tmp[(i+k)%n]=nums[i];
}
nums=tmp;
}
};
思路3:
void rotate(int* nums, int numsSize, int k) {
k=k%numsSize;
reverse(nums,numsSize);
reverse(nums,k);
reverse(&nums[k],numsSize-k);
}
void reverse(int* nums,int n){
int mid=n/2;
int tmp;
for(int i=0;i<mid;i++){
tmp=nums[i];
nums[i]=nums[n-i-1];
nums[n-i-1]=tmp;
}
}