Replace array elements in given range from another array elements

Updated

Given an array A[] and size of array is N. The task is to replace element of array A[] are in given range L to R both are included. Element replace by one another Array B[] size of N.

Examples:

Input : N = 8
        A[] = { 3, 5, 3, 4, 9, 3, 1, 6 }
        B[] = { 5, 2, 7, 0, 1, 6, 4, 10 }
        L = 2
        R = 7
Output : 3 5 7 0 1 6 4 10
Since A[2] = 3 but this is replace by B[2] = 7
A[3] = 4 replace by B[3] = 0, A[4] = 9 replace by B[4] = 1,
A[5] = 3 replace by B[5] = 6,A[6] = 1 replace by B[6] = 4  
A[7] =  6 replace by B[7] = 10 

Input : N = 10
        A[] ={ 5, 8, 11, 15, 26, 14, 19, 17, 10, 14 }
        B[] = { 8, 6, 9, 2, 4, 6, 41, 32, 45, 78}
        L = 4
        R = 6
Output :5 8 11 15 4 6 41 17 10 14

Naive Approach:

A naive approach is to replace element in range L to R with extra space. Below is the implementation of the above approach.

Implementation in C++:

// C++ code to replace elements in a given range
#include <bits/stdc++.h>
using namespace std;

// Replace elements from L to R in A with elements from B
vector<int> replaceElements(int A[], int B[], int L, int R, int N) {
    vector<int> C;
    
    for (int i = 0; i < L; i++)
        C.push_back(A[i]);
    
    for (int i = L; i <= R; i++)
        C.push_back(B[i]);
    
    for (int i = R + 1; i < N; i++)
        C.push_back(A[i]);
    
    return C;
}

// Main Driver
int main() {
    int A[] = {5, 8, 11, 15, 26, 14, 19, 17, 10, 14};
    int B[] = {8, 6, 9, 2, 4, 6, 41, 32, 45, 78};
    int L = 4, R = 6;
    int N = sizeof(A) / sizeof(A[0]);
    vector<int> res = replaceElements(A, B, L, R, N);
    
    for (auto x : res)
        cout << x << " ";
    
    return 0;
}

Output :

5 8 11 15 4 6 41 17 10 14

Time Complexity : O(n)
Auxiliary Space : O(n)

Efficient Approach :

An efficient solution without using extra space. Below is the implementation of the above approach.

Implementation in C++:

// C++ code to replace elements in a given range
#include <bits/stdc++.h>
using namespace std;

int A[] = {5, 8, 11, 15, 26, 14, 19, 17, 10, 14};

// Replace elements from L to R in A with elements from B
void replaceElement(int B[], int L, int R, int N) {
    int j = 0;
    for (int i = L; i <= R; i++) {
        A[i] = B[j];
        j++;
    }
}

// Print array
void printArray(int N) {
    for (int i = 0; i < N; i++)
        cout << A[i] << " ";
    cout << endl;
}

// main Driver
int main() {
    int B[] = {8, 6, 9, 2, 4, 6, 41, 32, 45, 78};
    int L = 4, R = 6;
    int N = sizeof(A) / sizeof(A[0]);
    replaceElement(B, L, R, N);
    printArray(N);
    return 0;
}
5 8 11 15 4 6 41 17 10 14

Time Complexity: O(n)
Auxiliary Space : O(1)

Comment
Next tutorial
Mithlesh Upadhyay Published 28 Sep 2023 · 3 min read

Mithlesh Upadhyay is a Computer Science and AI expert from Madhya Pradesh with strong academic background (BE in CSE and M.Tech in AI) and over six years of experience in technical content development. He has contributed tech articles, led teams, and worked in Full Stack Development and Data Science. He founded the w3colleges.org portal for learning resources.

Related tutorials