题目描述
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: [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]
参考代码
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int length = nums.size();
if(length == 0 || k <= 0)
return;
k = k % length; // K可以大于length
mRotate(nums, 0, length-1);
mRotate(nums, 0, k-1);
mRotate(nums, k, length-1);
}
void mRotate(vector<int>& nums, int low, int high){
while(low < high){
swap(nums[low], nums[high]);
low++;
high--;
}
}
};
简单题
本文介绍了一种算法,用于将数组中的所有元素向右移动k个位置,通过示例展示了移动过程,并提供了一个C++代码实现。该算法首先反转整个数组,然后分别反转前k个元素和剩余元素,从而达到右移的效果。
1万+

被折叠的 条评论
为什么被折叠?



