目录
1.题目
给你一个数组,将数组中的元素向右轮转 k
个位置,其中 k
是非负数
题目来源:力扣(LeetCode)
2.题解
使用分割翻转法
扫描二维码关注公众号,回复:
14313546 查看本文章
3.代码
class Solution {
public void rotate(int[] nums, int k) {
k %= nums.length;
reverse(nums, 0, nums.length - 1);//翻转整个数组元素
reverse(nums, 0, k -1);//翻转k-1之前的元素
reverse(nums, k, nums.length - 1);//翻转K之后的数
}
public void reverse(int[] nums, int left, int right) {
while (left < right) {
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
left += 1;
right -= 1;
}
}
}
4.复杂度分析
时间复杂度:O(n),其中 n 为数组的长度。每个元素被翻转两次,一共 n个元素,因此总时间复杂度为 O(2n)=O(n)O(2n)=O(n)。
空间复杂度:O(1)