力扣189:轮转数组
力扣189:轮转数组
- 题目
- 思路
- 代码
题目
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
思路
这道题的关键是如何确认移动后的元素的位置,首先数组的容量是不变的,那么我们是否可以假装数组在往后延申,那么每个元素的位置只需要加k即可。同时又因为数组的容量是不变的也就是元素的个数是不变的,那么我们将+k后的下标再对容量进行取模那不得到移动后的元素的位置了吗。所以我们需要使用原数组初始化一个新的数组,之后再进行计算得到元素的新位置并将对应到新数组的各位置下。
代码
class Solution {
public:void rotate(vector<int>& nums, int k) {int n = nums.size();vector<int> res(nums);for(int i = 0;i < n;i++){//新数组的新位置存储旧元素的值res[(i+k)%n] = nums[i];}swap(res,nums);}
};