Open In App

Shift the elements between two arrays in Z form

Last Updated : 11 Sep, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given two arrays arr1[] and arr2[] both of size N, the task is to shift each element of the cell in Z form such that arr2[0] is in arr1[0], arr1[0] is in arr2[1], arr2[1] is in arr1[1] and so on and arr1[N-1] is in arr2[0].

Examples:

Input: arr1[] = {61, 45, 19, 33, 59, 7, 42, 24, 98, 77}
arr2[] = {86, 52, 10, 36, 22, 5, 98, 91, 13, 6}
Output: arr1[] = {86, 52, 10, 36, 22, 5, 98, 91, 13, 6}
arr2[] = {77, 61, 45, 19, 33, 59, 7, 42, 24, 98}

Explanation:

Input: arr1[] = {6, 24, 39, 99, 67}
arr2[] = {12, 84, 9, 13, 5}
Output: arr1[] = {12, 84, 9, 13, 5}
arr2[] = {67, 6, 24, 39, 99}

Approach: Let’s understand how the function zshift works step by step:

  • The variable t is assigned the last element of arr1, which will be used for swapping later.
  • The loop starts from the last index (N-1) and iterates down to the second index (1).
  • Inside the loop, the current element of arr2 is assigned to the corresponding index in arr1, and the previous element of arr1 is assigned the current element of arr2. This process effectively shifts the elements in a Z-form between the arrays.
  • After the loop, the first element of arr2 is assigned to the first element of arr1, and the original last element of arr1 (stored in t) is assigned to the first element of arr2. This finalizes the shifting process.

Below is the implementation of the above approach:

C++




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to perform Z-form shifting
// between two arrays
void zshift(int* arr1, int* arr2, int N)
{
 
    // Store the last element of arr1 in t
    int t = arr1[N - 1];
 
    for (int i = N - 1; i >= 1; i--) {
        // Shift elements of arr2[i] to arr1[i]
        arr1[i] = arr2[i];
 
        // Shift previous elements of arr1 to current index
        // of arr2
        arr2[i] = arr1[i - 1];
    }
 
    // Shift the first element of arr2 to arr1
    arr1[0] = arr2[0];
 
    // Shift the original last element of arr1 to arr2
    arr2[0] = t;
}
 
// Drivers code
int main()
{
    int arr1[] = { 61, 45, 19, 33, 59, 7, 42, 24, 98, 77 };
    int arr2[] = { 86, 52, 10, 36, 22, 5, 98, 91, 13, 6 };
    int N = sizeof(arr1) / sizeof(arr1[0]);
 
    zshift(arr1, arr2, N);
 
    /// Print the elements of arr1
    for (int i = 0; i < N; i++)
        cout << arr1[i] << " ";
    cout << endl;
 
    // Print the elements of arr2
    for (int i = 0; i < N; i++)
        cout << arr2[i] << " ";
 
    return 0;
}


Java




// Java program for the above approach
import java.util.Arrays;
class GFG {
    // Function to perform Z-form shifting
    // between two arrays
    public static void zshift(int[] arr1, int[] arr2, int N)
    {
 
        // Store the last element of arr1 in t
        int t = arr1[N - 1];
 
        for (int i = N - 1; i >= 1; i--) {
            // Shift elements of arr2[i] to arr1[i]
            arr1[i] = arr2[i];
 
            // Shift previous elements of arr1 to current
            // index of arr2
            arr2[i] = arr1[i - 1];
        }
 
        // Shift the first element of arr2 to arr1
        arr1[0] = arr2[0];
 
        // Shift the original last element of arr1 to arr2
        arr2[0] = t;
    }
    // Drivers code
    public static void main(String[] args)
    {
        int arr1[]
            = { 61, 45, 19, 33, 59, 7, 42, 24, 98, 77 };
        int arr2[]
            = { 86, 52, 10, 36, 22, 5, 98, 91, 13, 6 };
        int N = arr1.length;
 
        zshift(arr1, arr2, N);
 
        // Print the elements of arr1
        for (int i = 0; i < N; i++)
            System.out.print(arr1[i] + " ");
        System.out.println();
 
        // Print the elements of arr2
        for (int i = 0; i < N; i++)
            System.out.print(arr2[i] + " ");
        System.out.println();
    }
}
// This code is contributed by Abhishek Kumar


Python3




def zshift(arr1, arr2, N):
 
    # Store the last element of arr1 in t
    t = arr1[N - 1]
 
    for i in range(N - 1, 0, -1):
 
        # Shift elements of arr2[i] to arr1[i]
        arr1[i] = arr2[i]
 
        # Shift previous elements of arr1 to current index of arr2
        arr2[i] = arr1[i - 1]
 
    # Shift the first element of arr2 to arr1
    arr1[0] = arr2[0]
 
    # Shift the original last element of arr1 to arr2
    arr2[0] = t
 
 
# Drivers code
arr1 = [61, 45, 19, 33, 59, 7, 42, 24, 98, 77]
arr2 = [86, 52, 10, 36, 22, 5, 98, 91, 13, 6]
N = len(arr1)
zshift(arr1, arr2, N)
 
# Print the elements of arr1
for i in range(0, N, 1):
    print(arr1[i], end=" ")
print()
 
# Print the elements of arr2
for i in range(0, N, 1):
    print(arr2[i], end=" ")
 
# This code is contributed by Abhishek Kumar


C#




using System;
 
public class Program {
    // Function to perform Z-form shifting between two
    // arrays
    static void ZShift(int[] arr1, int[] arr2, int N)
    {
        // Store the last element of arr1 in t
        int t = arr1[N - 1];
 
        for (int i = N - 1; i >= 1; i--) {
            // Shift elements of arr2[i] to arr1[i]
            arr1[i] = arr2[i];
 
            // Shift previous elements of arr1 to current
            // index of arr2
            arr2[i] = arr1[i - 1];
        }
 
        // Shift the first element of arr2 to arr1
        arr1[0] = arr2[0];
 
        // Shift the original last element of arr1 to arr2
        arr2[0] = t;
    }
 
    public static void Main(string[] args)
    {
        int[] arr1
            = { 61, 45, 19, 33, 59, 7, 42, 24, 98, 77 };
        int[] arr2
            = { 86, 52, 10, 36, 22, 5, 98, 91, 13, 6 };
        int N = arr1.Length;
 
        ZShift(arr1, arr2, N);
 
        // Print the elements of arr1
        foreach(int num in arr1)
        {
            Console.Write(num + " ");
        }
        Console.WriteLine();
 
        // Print the elements of arr2
        foreach(int num in arr2)
        {
            Console.Write(num + " ");
        }
    }
}


Javascript




function zShift(arr1, arr2, N) {
    // Store the last element of arr1 in t
    const t = arr1[N - 1];
 
    for (let i = N - 1; i >= 1; i--) {
        // Shift elements of arr2[i] to arr1[i]
        arr1[i] = arr2[i];
 
        // Shift previous elements of arr1 to the current index of arr2
        arr2[i] = arr1[i - 1];
    }
 
    // Shift the first element of arr2 to arr1
    arr1[0] = arr2[0];
 
    // Shift the original last element of arr1 to arr2
    arr2[0] = t;
}
 
const arr1 = [61, 45, 19, 33, 59, 7, 42, 24, 98, 77];
const arr2 = [86, 52, 10, 36, 22, 5, 98, 91, 13, 6];
const N = arr1.length;
 
zShift(arr1, arr2, N);
 
// Print the elements of arr1
console.log(arr1.join(" "));
 
// Print the elements of arr2
console.log(arr2.join(" "));


Output

86 52 10 36 22 5 98 91 13 6 
77 61 45 19 33 59 7 42 24 98 

Complexity Analysis:

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


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads