力扣hot100——轮转数组
给定一个整数数组 nums
,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
解法思路:
// 空间换时间:轮转问题看作为平移,轮转就是转一圈,如果拉直这个轮的话,其实就是所有数字向后平移k
// 建立一个大小为 原数组+k的数组,将原数组中元素,移动k放入
// 然后将超出原数组部分放到前面空出的部分
class Solution {
public:
void rotate(vector<int>& nums, int k) {
// 空间换时间:轮转问题看作为平移,轮转就是转一圈,如果拉直这个轮的话,其实就是所有数字向后平移k
// 建立一个大小为 原数组+k的数组,将原数组中元素,移动k放入
// 然后将超出原数组部分放到前面空出的部分
int n = nums.size();
k %= n; // 如果 k 大于数组长度,只需考虑 k 对 n 取余的情况
vector<int> temp_v(n);
// 将元素平移 k 位
for (int i = 0; i < n; ++i) {
temp_v[(i + k) % n] = nums[i];
}
// 将结果复制回原数组
for (int i = 0; i < n; ++i) {
nums[i] = temp_v[i];
}
}
};