题目描述
给定一个整数数组 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);}
};