第一种方法:
按步骤,一次一次旋转。代码过于沙雕就不放了。
第二种方法:
第一种的升级,可以直接定位每个数字旋转后应在的位置。其中主要旋转次数k有可能大于数组长度,应先取余。
class Solution {
public:
vector<int> rotate(vector<int> &nums, int k) {
vector<int> res;
int l=nums.size();
k=k%l;
for (int i=0;i<l;i++)
res.push_back(nums[(i+l-k)%l]);
return res;
}
};
第三种方法:
翻转字符串。
class Solution {
public:
void rotate(vector<int>& nums, int k) {
k=k%nums.size();
reverse(nums.begin(),nums.end()-k);
reverse(nums.end()-k,nums.end());
reverse(nums.begin(),nums.end());
}
};
没找到时间复杂度为O(1)的算法。