Q: Given an integer array nums, rotate the array to the right by k steps, where k is non-negative.
A: I can use three methods to solve this problems.
a) Reverse the array three times.
For array [1,2,3,4,5] k = 2
firstly, I reverse the whole array and get arrary[5,4,3,2,1]
secondly, I reverse the fisrt k numbers and get arrary [4,5,3,2,1]
thirdly, I reverse the remaining numbers and get array [4,5,1,2,3].
Now , the array is the answer
class Solution {
public void rotate(int[] nums, int k) {
k = k % nums.length;
reverse(nums, 0, nums.length);
reverse(nums, 0, k);
reverse(nums, k, nums.length);
}
public static void reverse(int[] nums, int start, int end){
int t;
for(int i=start; i<nums.length && end-1-(i-start) < nums.length && i<start + (end-start)/2;i++){
t = nums[i];
nums[i] = nums[end-1-(i-start)];
nums[end-1-(i-start)] = t;
}
}
}
b) New another array and copy numbers from the original array
c) bubble swap numbers from back to front k times
every loop will move the last number to the first
it is similar to the bubble sorting algorithm