给你一个数组,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
题解:
class Solution {
public void rotate(int[] nums, int k) {
k %= nums.length;
reverse(nums, 0, nums.length-1);
reverse(nums, 0, k-1);
reverse(nums, k, nums.length-1);
}
public void reverse(int[] nums,int start, int end){
while(start <= end){
int tmp = nums[end];
nums[end] = nums[start];
nums[start] = tmp;
end--;
start++;
}
}
}
思路:
先对整个数组实行翻转,这样子原数组中需要翻转的子数组,就会跑到数组最前面。
然后,从 kk 处分隔数组,左右两数组,各自进行翻转。
reverse就是简单的从左到右交换数值,达到翻转的效果。这里是创建临时变量的方法。