题目描述
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
示例 1:
输入: nums = 1,2,3,4,5,6,7, k = 3
输出: 5,6,7,1,2,3,4
解释:
向右轮转 1 步: 7,1,2,3,4,5,6
向右轮转 2 步: 6,7,1,2,3,4,5
向右轮转 3 步: 5,6,7,1,2,3,4
示例 2:
输入: nums = -1,-100,3,99, k = 2
输出: 3,99,-1,-100
解释:
向右轮转 1 步: 99,-1,-100,3
向右轮转 2 步: 3,99,-1,-100
提示:
1 < = n u m s . l e n g t h < = 10 5 1 <= nums.length <= 10^5 1<=nums.length<=105
− 2 31 < = n u m s i < = 2 31 − 1 -2^{31} <= numsi <= 2^{31} - 1 −231<=numsi<=231−1
0 < = k < = 10 5 0 <= k <= 10^5 0<=k<=105
思路
进行三次翻转即可。
代码
cpp
class Solution {
public:
void rotate(vector<int>& nums, int k) {
k %= nums.size();
reverse(nums.begin(), nums.end());
reverse(nums.begin(), nums.begin() + k);
reverse(nums.begin() + k, nums.end());
}
};