给定一个整数数组 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];}}
};