题目
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
提示:
1 <= nums.length <= 10^5
-2^31 <= nums[i] <= 2^31 - 1
0 <= k <= 10^5
思路
类似于字符串反转的题目
步骤:
- 将反转数k对数组长度len取余,避免一些重复旋转
- 将最后k个数之前的先反转一次
- 将最后k个数反转一次
- 将数组反转一次
代码
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int len = nums.size();
k%=len;
reverse(nums.begin(), nums.begin()+len-k);
reverse(nums.begin()+len-k, nums.end());
reverse(nums.begin(), nums.end());
}
};