一、题目要求
Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].
二、代码实现
解法1:
void rotate(vector<int>& nums, int k) {
if(nums.size()<2 || k<1)
return;
int i,val;
k=k%nums.size();
std::rotate(nums.begin(),nums.end()-k,nums.end());
}
解法2:
void rotate(vector<int>& nums, int k) {
if(nums.size()<2 || k<1)
return;
int i,val;
queue<int> st;
k=k%nums.size();
if(k==0)
return ;
for(auto tmp=nums.end()-1;tmp>nums.begin();tmp--)
{
if(nums.end()-tmp<=k)
{
st.push(*tmp);
}
if(tmp-nums.begin()>=k)
{
*tmp=*(tmp-k);
}
else
{
if(!st.empty())
{
*tmp=st.front();
st.pop();
}
}
}
*nums.begin()=st.front();
st.pop();
}