Thursday, September 7, 2017

189. Rotate Array

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.

Solution:
There are couple ways to do that, the easiest one is to use a different array and assign the value to the right position in the new array. Then copy all the values back to original array. 
You can see different solutions in the solution section of this question in leetcode.

My solution is using the reverse technique.
Basically in order to rotate an array to the right by k steps, we need to do reverse 3 times: 
1. Reverse the entire arrary
2. Reverse the first K elements
3. Reverse the rest of the elements.

  public void rotate(int[] nums, int k) {  
     if(nums==null || nums.length==0) return;  
     k=k%nums.length;  
     if(k==0) return;  
     reverse(nums,0,nums.length-1);  
     reverse(nums,0,k-1);  
     reverse(nums,k,nums.length-1);  
   }  
   public void reverse(int[] nums, int i,int j){  
     while(i<j){  
       int temp=nums[i];  
       nums[i++]=nums[j];  
       nums[j--]=temp;  
     }  
   }  

No comments:

Post a Comment