study-leetcode-189 旋转数组
1.题目描述
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
2.设计思想
先把数组中后k个元素逆置,再把数组中前n-k个元素逆置,最后把整个数组逆置。
3.相关代码
python
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
k = k % n
def Reverse(left,right):
while 0 <= left < n and 0 <= right < n and left < right:
nums[left],nums[right] = nums[right],nums[left]
left += 1
right -= 1
Reverse(n - k, n - 1)
Reverse(0, n - k - 1)
Reverse(0, n - 1)
C++
class Solution {
public:
void Reverse(vector<int>& nums, int left, int right) {
while(left < right) {
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
left += 1;
right -= 1;
}
}
void rotate(vector<int>& nums, int k) {
int n = nums.size();
k = k % n;
Reverse(nums, n - k, n - 1);
Reverse(nums, 0, n - k - 1);
Reverse(nums, 0, n - 1);
}
};
4.算法效率
时间复杂度:O( n )
空间复杂度:O( 1 )