要求:空间复杂度为o(1)
使用数组翻转,首先将整体翻转,再分成两部分各自翻转
注意:
1.k可能大于数组长度,需要取模
2.拆分点为k%n
void rotate(int* nums, int numsSize, int k) {
k=k%numsSize;
reverse(nums,0,numsSize-1);
reverse(nums,0,k-1);
reverse(nums,k,numsSize-1);
}
void reverse(int* nums,int start, int end){
int temp;
for(;start<end;){
temp=nums[start];
nums[start]=nums[end];
nums[end]=temp;
start++;
end--;
}
}
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int i=k%nums.size();
reverse(nums.begin(),nums.end());
reverse(nums.begin(),nums.begin()+i);
reverse(nums.begin()+i,nums.end());
}
};