private static void rotate(int[] nums, int k) {
int length = nums.length;
if (k == 0 || k == length || length == 1) {
return;
}
if (k > length) {
k %= length;
}
int indexLimit = length - 1;
int curIndex = indexLimit;
int lastIndex = indexLimit;
int lastValue = nums[indexLimit];
int count = 0;
while (count++ < length) {
curIndex += k;
if (curIndex > indexLimit) {
curIndex -= length;
}
int tmp = nums[curIndex];
nums[curIndex] = lastValue;
lastValue = tmp;
if (curIndex == lastIndex) {
curIndex = --lastIndex;
lastValue = nums[curIndex];
}
}
}