最笨的方法,额外空间,循环替换
public class Solution {
public void Rotate(int[] nums, int k) {
int[] newarray = new int[nums.Length];
for(int i=0; i<nums.Length; i++) {
newarray[i] = nums[i];
}
int index = 0;
for( int i=0; i<nums.Length; i++ ) {
index = i+k;
if( index >= newarray.Length ) {
index = index % newarray.Length;
}
nums[index] = newarray[i];
}
}
}
三次翻转
- 翻转 0 - k 的数组内容
- 翻转 (k + 1) - (length - 1) 的内容
- 翻转 0 - (length - 1) 的内容
public class Solution {
public void Rotate(int[] nums, int k) {
k %= nums.Length;
Reverse(nums, 0, nums.Length-k-1);
Reverse(nums, nums.Length-k, nums.Length-1);
Reverse(nums, 0, nums.Length-1);
}
public void Reverse(int[] reverseArr, int start, int end) {
while( start < end ) {
reverseArr[start] = reverseArr[start] ^ reverseArr[end];
reverseArr[end] = reverseArr[start] ^ reverseArr[end];
reverseArr[start] = reverseArr[start] ^ reverseArr[end];
start ++;
end --;
}
}
}