Rotate Array

 Given an unsorted array arr[] of size N. Rotate the array to the left (counter-clockwise direction) by D steps, where D is a positive integer. 

Example 1:

Input:
N = 5, D = 2
arr[] = {1,2,3,4,5}
Output: 3 4 5 1 2
Explanation: 1 2 3 4 5  when rotated
by 2 elements, it becomes 3 4 5 1 2.

Example 2:

Input:
N = 10, D = 3
arr[] = {2,4,6,8,10,12,14,16,18,20}
Output: 8 10 12 14 16 18 20 2 4 6
Explanation: 2 4 6 8 10 12 14 16 18 20 
when rotated by 3 elements, it becomes 
8 10 12 14 16 18 20 2 4 6.

Your Task:
Complete the function rotateArr() which takes the array, D and N as input parameters and rotates the array by D elements. The array must be modified in-place without using extra space. 

 

Expected Time Complexity: O(N)
Expected Auxiliary Space: O(1)

 

Constraints:
1 <= N <= 107
1 <= D <= N
0 <= arr[i] <= 105



Solution

// { Driver Code Starts

#include<bits/stdc++.h>

using namespace std;



 // } Driver Code Ends

class Solution{

    public:

    

    void reverse(int arr[],int low,int high){

        while(low<high){

            swap(arr[low],arr[high]);

            low++;

            high--;

        }

    }

    //Function to rotate an array by d elements in counter-clockwise direction. 

    void rotateArr(int arr[], int d, int n){

        // code here

        reverse(arr,0,d-1);

        reverse(arr,d,n-1);

        reverse(arr,0,n-1);

    }

};


// { Driver Code Starts.


int main() {

int t;

//taking testcases

cin >> t;

while(t--){

    int n, d;

    

    //input n and d

    cin >> n >> d;

    

    int arr[n];

    

    //inserting elements in the array

    for(int i = 0; i < n; i++){

        cin >> arr[i];

    }

    Solution ob;

    //calling rotateArr() function

    ob.rotateArr(arr, d,n);

    

    //printing the elements of the array

    for(int i =0;i<n;i++){

        cout << arr[i] << " ";

    }

    cout << endl;

}

return 0;

}  // } Driver Code Endsn:




Comments

Post a Comment

Popular posts from this blog

Minimum adjacent difference in a circular array