题目描述
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
出处
思路
好像是某一年的考研题,原地逆序后k项,再逆序前n-k项,再逆序整个数组即可。空间复杂度O(1),时间复杂度O(n)。要注意k可能比n大,需要对n取余。
代码
class Solution {
private:
void reverse(vector<int>& nums, int left, int right){
int t;
while (left<right)
{
t=nums[left];
nums[left]=nums[right];
nums[right]=t;
left++;right--;
}
}
public:
void rotate(vector<int>& nums, int k) {
int n=nums.size();
k=k%nums.size();
if(k==n)return;
reverse(nums, n-k, n-1);
reverse(nums, 0, n-k-1);
reverse(nums, 0, n-1);
}
};