题目描述:
题解方法:
方法一:
// 核心代码 即遍历并复制元素到新的数组中
for(int i = 0; i <n; ++i){
arr[(i+k)%n] = nums[i];
}
力扣运行完整代码:
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
vector<int> arr(n);
for(int i = 0; i <n; ++i){
arr[(i+k)%n] = nums[i];
}
nums.assign(arr.begin(), arr.end());
}
};
执行用时:
方法二:
class Solution {
public:
void reverse(vector<int>& nums, int start, int end){
while(start < end){
//通过调用交换函数,实现数组中的前后两两元素交换。
swap(nums[start], nums[end]);
start +=1; //start从数组前面开始遍历
end -=1; //end从数组后面开始遍历
}
}
void rotate(vector<int>& nums, int k) {
k %= nums.size();
reverse(nums,0,nums.size()-1);
reverse(nums, 0 ,k -1);
reverse(nums,k , nums.size()-1);
}
};
执行用时:
总结:
解题方法不唯一。本题可以使用空间复杂度为 O(1)
的 原地 算法解决这个问题吗?欢迎评论区留言哦