题目描述:
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
解题思路:
由题述可以看到,向右移动k,则数组的后k个元素就移到前面了,前n-k个元素放到了后面,可以先将整个数组反转,然后逐段反转。
class Solution {
public:
void rotate(vector<int>& nums, int k) {
reverse(nums.begin(),nums.end());
reverse(nums.begin(),nums.begin()+k%nums.size());
reverse(nums.begin()+k%nums.size(),nums.end());
}
};
需要格外注意的是,k%nums,考虑到右移的位数大于数组本身的大小。
当然,如果不知道c++有reverse函数可以使用,则用简单的逻辑也可以:
class Solution {
public:
void rotate(vector<int>& nums, int k) {
// reverse(nums.begin(),nums.end());
// reverse(nums.begin(),nums.begin()+k%nums.size());
// reverse(nums.begin()+k%nums.size(),nums.end());
vector<int>output;
int len=nums.size();
for(int i=len-k%len;i<len;i++){
output.push_back(nums[i]);
}
for(int i=0;i<len-k%len;i++){
output.push_back(nums[i]);
}
nums=output;
}
};
【end】