题目:题目链接
思路:我记得严蔚敏奶奶的数据结构中有,就是先整体反转,然后分别翻转前k个,和后面的n-k个。
令S= P1P2, 首先P1是前n-k个数字序列,P2是后面k个。整体旋转:S’=P2’P1’ 。之后对两部分分别旋转:S1=P2P1。得到答案。
注意:k可能会大于数组长度,对数组长度取余就好了
直接看代码吧:
class Solution {
public:
void rotate(vector<int>& nums, int k) {
k %= nums.size();
reverse(nums.begin(),nums.end());
reverse(nums.begin(),nums.begin()+k);
reverse(nums.begin()+k,nums.end());
}
};
也可以自己实现reverse函数:
void reverse(vector<int>&nums,int start,int end){//end是最后一个元素的下标
while(start<end){
swap(nums[start],nums[end]);
start++;
end--;
}
}
也可以自己实现swap函数:
void swap(int& a,int &b){
a = a^b;
b = a^b;
a = a^b;
}
也可以自己实现异或运算?别套了,别套了。
结束。
加油加油加油!!!!!你是最棒的,好兄弟。