给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数
方法一:
先把后k位存在新数组当中,再让原数组中的所有元素都后移,最后将新数组当中存的后k位放在前k位
注意
- 可能会出现k>nums.size()的情况,所以应该在一开始就k=k%nums.size()
- 下标千万要看清楚,哪里变换到哪里了
- 这里要注意,返回值为空,所以只能修改原数组
题解2:class Solution {
public:
void rotate(vector<int>& nums, int k) {
k=k%nums.size();
vector<int>temp(k+1);
for(int i=nums.size()-k,j=0;i<=nums.size()-1; )
{
temp[j++]=nums[i++];
}
int r=nums.size()-1,l=nums.size()-k-1;
while(l>=0)
{
nums[r--]=nums[l--];
}
for(int i=0;i<k;i++)
{
nums[i]=temp[i];
}
}
};
由观察可得,原数组中下标为i位置的元素存在了新数组下标为(i+k)%n位置中,再将新数组赋值给原数组就可以了
方法三:数组翻转class Solution { public: void rotate(vector<int>& nums, int k) { int n=nums.size(); vector<int>temp(n); for(int i=0;i<n;i++) { temp[(i+k)%n]=nums[i]; } nums.assign(temp.begin(),temp.end()); } };