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:
- Reverse the first K elements
- Reverse the elements from K to N
- 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));
}
}