Problem: Given array of size ‘n’ and left rotate k times

Input : [1,2,3,4,5,6,7], K=3

  • Left Rotate 1: 2,3,4,5,6,7,1
  • Left Rotate 2: 3,4,5,6,7,1,2
  • Left Rotate 3: 4,5,6,7,1,2,3

Solution:

  1. Reverse the first K elements
  2. Reverse the elements from K to N
  3. Revers the Whole array
public class LeftRotateArray {

	public void rotate(int[] nums, int k) {
		reverse(nums, 0, k - 1);
		
	    reverse(nums, k, nums.length - 1);
	 
	    reverse(nums, 0, nums.length - 1);
    }
	
	 private void reverse(int[] nums, int start, int end) {
	        while (start < end) {
	            int temp = nums[start];
	            nums[start] = nums[end];
	            nums[end] = temp;
	            start++;
	            end--;
	        }
	    }
	 
	public static void main(String[] args) {
		LeftRotateArray rotate = new LeftRotateArray();
    	int[] data = {1,2,3,4,5,6,7};
    	rotate.rotate(data, 3);
        System.out.println(Arrays.toString(data));
    	
	}
}