2. Rotate Array
Different solutions to array rotation.
Input: nums = [1,2,3,4,5,6,7], 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]Input: nums = [-1,-100,3,99], 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]Solution I
class Solution
{
public:
void rotate(vector<int> &nums, int k)
{
int len = nums.size();
int rotate = 0;
int temp, j, i, r;
rotate = k % len;
if (rotate != 0)
{
r = len - rotate; //finding no of left rotation
int g = gcd(rotate, r);
for (i = 0; i < g; i++)
{
j = i;
temp = nums[j];
while (1)
{
int move = j + r;
if (move >= len)
move = move - len;
if (move == i)
break;
nums[j] = nums[move];
j = move;
}
nums[j] = temp;
}
}
}
};Solution II
Last updated