文章目录
6、轮转数组
1、描述
给定一个整数数组 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、关键字
数组向后轮转变换
3、思路
先用k对n取模
思路一:使用辅助数组,时间复杂度O(N),空间复杂度O(N)
思路二:发现规律:先把整个数组逆置,之后把前k个元素逆置,之后把后边n- k个元素逆置
4、notes
多练
6、code
cpp
class Solution {
public:
void reverse(vector<int>& nums, int i, int j) {
while(i < j) {
int tem = nums[i];
nums[i] = nums[j];
nums[j] = tem;
i++;
j--;
}
}
void rotate(vector<int>& nums, int k) {
int n = nums.size();
k %= n ;
reverse(nums, 0, n - 1); // 整个数组逆置
reverse(nums, 0, k - 1); // 逆置前边的k个,
reverse(nums, k, n - 1); // 逆置后边的n - k个
}
};