
- 思路1
通过两重for循环………… - 思路2
通过k二分数组,然后根据前半和后半的数组反转,然后整合同一数组反转
class Solution {
public:
void rotate(vector<int>& nums, int k) {
if(k==0||nums.empty()) return ;
int temp=0;
k=k%nums.size();
for(int i =0;i<(nums.size()-k)/2;++i){
temp = nums[i];
nums[i] = nums[nums.size()-k-i-1];
nums[nums.size()-k-1-i] = temp;
}
for(int i =0 ; i<k/2;++i){
temp = nums[i+nums.size()-k];
nums[i+nums.size()-k]=nums[nums.size()-1-i];
nums[nums.size()-1-i]= temp;
}
for(int i =0;i<nums.size()/2;++i){
temp=nums[i];
nums[i]= nums[nums.size()-1-i];
nums[nums.size()-1-i]= temp;
}
}
};
- 看的题解………本来可以直接用reverse直接旋转数组,但是这里通过自己写的函数,加快了速度…………
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n=nums.size();
int times=k%n;
if(times==0)
return;
rotCore(nums,0,n-1-times);
rotCore(nums,n-times,n-1);
rotCore(nums,0,n-1);
}
void rotCore(vector<int>& nums,int b,int e){
while(b<e){
swap(nums[b],nums[e]);
++b;
--e;
}
return;
}
};