# Rotate Array

Hi Geeks! Welcome to 100 Days of Leetcode Challenge.

## DAY 6

This is nothing but just playing with Array.

Here is our given problem,

Given an array, rotate the array to the right by k steps, where k is non-negative.

Example 1:

```Input: `[1,2,3,4,5,6,7]` and k = 3
Output: `[5,6,7,1,2,3,4]`
Explanation:
rotate 1 steps to the right: `[7,1,2,3,4,5,6]`
rotate 2 steps to the right: ```[6,7,1,2,3,4,5]
```rotate 3 steps to the right: `[5,6,7,1,2,3,4]`
```

Example 2:

```Input: `[-1,-100,3,99]` and k = 2
Output: [3,99,-1,-100]
Explanation:
rotate 1 steps to the right: [99,-1,-100,3]
rotate 2 steps to the right: [3,99,-1,-100]
```

Note:

• Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
• Could you do it in-place with O(1) extra space?

## How To Approach this problem?

1. First reverse the whole array.
2. Second reverse the array from 0 to k-1 elements.
3. Third reverse the array from k to end of array elements.

## Solution

```class Solution {
public void rotate(int[] nums, int k) {

/*if k is bigger than the array length, to order k inside the
length of array, we use this order condition
*/
k = k % nums.length;

//First reverse the whole arrray
reverse(nums,0,nums.length-1);

//Second reverse the array from 0 to k-1 elements
reverse(nums,0,k-1);

//Third reverse the array from k to nums.length-1
reverse(nums,k,nums.length-1);

}

public void reverse(int[] nums, int start, int end)
{
while(start < end)
{
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}
}
```