189. Rotate Array
Easy
1132573FavoriteShare
Given an array, rotate the array to the right by k steps, where k is non-negative.
Example 1:
Input:[1,2,3,4,5,6,7]
and k = 3 Output:[5,6,7,1,2,3,4]
Explanation: rotate 1 steps to the right:[7,1,2,3,4,5,6]
rotate 2 steps to the right:[6,7,1,2,3,4,5]
rotate 3 steps to the right:[5,6,7,1,2,3,4]
Example 2:
Input: [-1,-100,3,99]
and k = 2
Output: [3,99,-1,-100]
Explanation:
rotate 1 steps to the right: [99,-1,-100,3]
rotate 2 steps to the right: [3,99,-1,-100]
Note:
- Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
- Could you do it in-place with O(1) extra space?
第一种解法:暴力法,取出最后一位,插到第一位。
class Solution {
public:
void rotate(vector<int>& nums, int k) {
while(k>0)
{
int i=nums[nums.size()-1];
nums.pop_back();
nums.insert(nums.begin(),i);
k--;
}
return;
}
};
第二种解法,一次性取出最后K位,插入到第一位。在做这种的时候有特殊情况,让我递交了两次,testcase是[-1],2.也就是说数组的size小于k的值,这时需要k=k%nums.size(),加上这一句就AC了。
class Solution {
public:
void rotate(vector<int>& nums, int k) {
if(nums.size()<k)k=k%nums.size();
std::vector<int>::iterator it;
it=nums.begin()+nums.size()-k;
vector<int> temp;
temp.assign(it,nums.end());
while(k>0)
{
nums.pop_back();
k--;
}
nums.insert(nums.begin(),temp.begin(),temp.end());
return;
}
};