Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7]
is rotated to [5,6,7,1,2,3,4]
.
Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
Java:
sulotion 1:
public class Solution {
public void rotate(int[] nums, int k) {
int tempnums[] = new int[k];
int s = 0;
k = k % nums.length;
for(int i=nums.length - k; i< nums.length; i++)
{
tempnums[s] = nums[i];
s ++;
}
for(int j=nums.length - k - 1; j>= 0; j --)
{
nums[j + k] = nums[j];
}
for(int p = 0; p<k; p++)
{
nums[p] = tempnums[p];
}
}
}
solution 2:
space O(1)
public class Solution {
public void rotate(int[] nums, int k) {
k = k % nums.length;
if(k != 0)
{
reverse(nums, 0, nums.length - 1);
reverse(nums, 0, k-1);
reverse(nums, k, nums.length - 1);
}
}
public static void reverse(int[] reverse, int start, int end)
{
for(int i = 0; i<Math.floor((end+1 -start)/2); i++)
{
int temp = reverse[i+start];
reverse[i+start] = reverse[end -i];
reverse[end -i] = temp;
}
}
}