这道题挺简单,那就先将数组的最后一个元素进行头插,再删掉,这样循环k次即可。
class Solution {
public:
void rotate(vector<int>& nums, int k) {
while(k)
{
nums.insert(nums.begin(),nums[nums.size()-1]);
nums.pop_back();
k--;
}
}
};
事与愿违,用例不通过,时间复杂度有点高,那就优化一下,用空间换时间,将每个元素的最终位置用下标和k计算出来,最终的下标位置为index=(i+k)%nums.size(),因为考虑到后面元素的覆盖,所以要用一个数组将原来的数据存起来。
class Solution {
public:
void rotate(vector<int>& nums, int k) {
//可以调整位置,但元素被覆盖怎么办,copy一份原数据
vector<int> result(nums.size());
result.assign(nums.begin(),nums.end());
int index=0;
for(int i=0;i<nums.size();i++)
{
index=(i+k)%nums.size();
nums[index]=result[i];
}
}
};
和题解的方法一是差不多的,我这个复杂度更高一点。