旋转数组
前两种方法过于基础,此处省略。
方法 3:使用环状替换
nums: [1, 2, 3, 4, 5, 6]
k: 2
class Solution {
public:
void rotate(vector<int>& nums, int k) {
k=k%nums.size();
int count=0;
for(int start=0;count<nums.size();start++){
int cur=start;
int pre=nums[start];
do{
int next=(cur+k)%nums.size();
int tmp=nums[next];
nums[next]=pre;
pre=tmp;
cur=next;
count++;
}while(start!=cur);
}
}
};
方法 4:使用反转
class Solution {
public:
void rotate(vector<int>& nums, int k) {
k=k%nums.size();
reverse(nums.begin(),nums.end());
reverse(nums.begin(),nums.begin()+k);
reverse(nums.begin()+k,nums.end());
}
};