思路:考研党感觉是个比较经典的题型了
首先对数组整体进行翻转,
【1 2 3 4 5 6 7】-->【7 6 5 4 3 2 1】
从k(k是右移的数量)处分割数组,再次进行翻转,
【(7 6 5)(4 3 2 1)】-->【(5 6 7)(1 2 3 4)】
题解:
class Solution {
public:
void reverse(vector<int>& nums,int begin,int end){
for(int i = 0;i<(end-begin+1)/2 ;i++){
swap(nums[begin+i],nums[end-i]);
}
}
void rotate(vector<int>& nums, int k) {
k %= nums.size();//取k的余数,针对k>size的情况
reverse(nums, 0, nums.size() - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, nums.size() - 1);
}
};
官方题解:
class Solution {
public:
void reverse(vector<int>& nums, int start, int end) {
while (start < end) {
swap(nums[start], nums[end]);
start += 1;
end -= 1;
}
}
void rotate(vector<int>& nums, int k) {
k %= nums.size();
reverse(nums, 0, nums.size() - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, nums.size() - 1);
}
};
作者:力扣官方题解
链接:https://leetcode.cn/problems/rotate-array/solutions/551039/xuan-zhuan-shu-zu-by-leetcode-solution-nipk/
来源:力扣(LeetCode)