题目:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
例:输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4]
解析:类似于字符串的左移算法
①先将整个数组翻转过来;
②翻转0-k-1的数组;
③翻转k-array,length-1的数组;
public void rotate(int[] nums, int k) {
int length = nums.length;
//去除K>length情况的影响
int rk = k%length;
//翻转0-(length-1)的数组
reverse(nums,0,length-1);
reverse(nums,0,rk-1);
reverse(nums,rk,length-1);
}
//翻转数组的操作
public void reverse(int[] nums, int start, int end){
while (end>start){
int temp = 0;
temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++; end--;
}
}