Bird
Raised Fist0
DSA Pythonprogramming~20 mins

Merge Two Sorted Arrays Without Extra Space in DSA Python - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Master of In-Place Array Merging
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of merging two sorted arrays without extra space
What is the output of the following code after merging two sorted arrays without using extra space?
DSA Python
def merge(arr1, arr2, n, m):
    i = 0
    j = 0
    while i < n and j < m:
        if arr1[i] > arr2[j]:
            arr1[i], arr2[j] = arr2[j], arr1[i]
            i += 1
            j += 1
        else:
            i += 1
    arr1.sort()
    arr2.sort()

arr1 = [1, 5, 9, 10, 15, 20]
arr2 = [2, 3, 8, 13]
merge(arr1, arr2, len(arr1), len(arr2))
print(arr1)
print(arr2)
A
[1, 3, 5, 8, 9, 10]
[2, 13, 15, 20]
B
[1, 2, 3, 5, 8, 9]
[10, 13, 15, 20]
C
[1, 5, 8, 9, 10, 13]
[2, 3, 15, 20]
D
[1, 2, 3, 5, 8, 9, 10]
[13, 15, 20]
Attempts:
2 left
💡 Hint
Focus on swapping elements when the first array element is greater than the second array element, then sort both arrays.
🧠 Conceptual
intermediate
1:30remaining
Understanding the in-place merge approach
Why does the approach of swapping elements between two sorted arrays and then sorting both arrays work for merging without extra space?
ABecause swapping ensures smaller elements move to the first array and sorting finalizes the order in both arrays.
BBecause sorting only the first array is enough to merge both arrays.
CBecause swapping elements randomly mixes arrays and sorting is unnecessary.
DBecause the arrays are merged by concatenation without sorting.
Attempts:
2 left
💡 Hint
Think about how swapping affects the distribution of smaller and larger elements.
🔧 Debug
advanced
2:00remaining
Identify the bug in the merge function
What is the bug in this merge function that merges two sorted arrays without extra space?
DSA Python
def merge(arr1, arr2, n, m):
    i = 0
    j = 0
    while i < n and j < m:
        if arr1[i] > arr2[j]:
            arr1[i], arr2[j] = arr2[j], arr1[i]
            j += 1
        else:
            i += 1
    arr1.sort()
    arr2.sort()
AThe index j is incremented incorrectly causing index out of range error.
BThe arrays are not sorted after swapping elements.
CThe index i is not incremented after swapping, causing an infinite loop.
DThe function uses extra space which is not allowed.
Attempts:
2 left
💡 Hint
Check the loop variables and how they change inside the loop.
❓ Predict Output
advanced
2:30remaining
Output of optimized gap method for merging arrays
What is the output of the following code that merges two sorted arrays without extra space using the gap method?
DSA Python
def next_gap(gap):
    if gap <= 1:
        return 0
    return (gap // 2) + (gap % 2)

def merge(arr1, arr2, n, m):
    gap = n + m
    gap = next_gap(gap)
    while gap > 0:
        i = 0
        while i + gap < n:
            if arr1[i] > arr1[i + gap]:
                arr1[i], arr1[i + gap] = arr1[i + gap], arr1[i]
            i += 1
        j = gap - n if gap > n else 0
        while i < n and j < m:
            if arr1[i] > arr2[j]:
                arr1[i], arr2[j] = arr2[j], arr1[i]
            i += 1
            j += 1
        if j < m:
            j = 0
            while j + gap < m:
                if arr2[j] > arr2[j + gap]:
                    arr2[j], arr2[j + gap] = arr2[j + gap], arr2[j]
                j += 1
        gap = next_gap(gap)

arr1 = [10, 27, 38, 43]
arr2 = [3, 9, 82]
merge(arr1, arr2, len(arr1), len(arr2))
print(arr1)
print(arr2)
A
[3, 9, 10, 27]
[38, 43, 82, 100]
B
[10, 27, 38, 43]
[3, 9, 82]
C
[3, 9, 27, 38]
[10, 43, 82]
D
[3, 9, 10, 27]
[38, 43, 82]
Attempts:
2 left
💡 Hint
The gap method compares elements at a distance and reduces the gap gradually.
🧠 Conceptual
expert
2:00remaining
Why is the gap method efficient for merging without extra space?
Why does the gap method provide an efficient way to merge two sorted arrays without extra space compared to the naive swapping and sorting approach?
ABecause it reduces the number of comparisons and swaps by comparing elements at a gap and gradually reducing it, avoiding full sorts.
BBecause it uses extra memory to store intermediate results, speeding up the process.
CBecause it sorts each array separately before merging, which is faster.
DBecause it merges arrays by concatenation and then sorts the combined array.
Attempts:
2 left
💡 Hint
Think about how reducing the gap affects the sorting process.

Practice

(1/5)
1. What is the main goal when merging two sorted arrays without extra space?
easy
A. Combine both arrays into one sorted array without using extra memory
B. Sort each array separately using extra space
C. Copy elements from one array to another without sorting
D. Create a new array to hold merged elements

Solution

  1. Step 1: Understand the problem requirement

    The problem asks to merge two sorted arrays into a single sorted sequence without using extra space, meaning no new arrays can be created.
  2. Step 2: Identify the correct approach

    We must rearrange elements within the given arrays to maintain sorted order without additional memory.
  3. Final Answer:

    Combine both arrays into one sorted array without using extra memory -> Option A
  4. Quick Check:

    Merge without extra space = Combine in-place [OK]
Hint: Merge by swapping elements in place without extra arrays [OK]
Common Mistakes:
  • Trying to create a new array for merged result
  • Sorting arrays separately without merging
  • Ignoring the no extra space constraint
2. Which of the following Python code snippets correctly swaps elements between two arrays arr1 and arr2 without extra space?
easy
A. arr1[i] = arr1[i] + arr2[j]; arr1[i] = arr1[i] - arr2[j]; arr2[j] = arr1[i]
B. arr1[i] = arr2[j]; arr2[j] = arr1[i]
C. temp = arr1[i]; arr1[i] = arr2[j]; arr2[j] = temp
D. arr1[i], arr2[j] = arr2[j], arr1[i]

Solution

  1. Step 1: Check swapping syntax in Python

    Python allows swapping two variables in one line using tuple unpacking: a, b = b, a.
  2. Step 2: Identify correct swap without extra variable

    arr1[i], arr2[j] = arr2[j], arr1[i] uses this syntax correctly to swap arr1[i] and arr2[j] without extra space.
  3. Final Answer:

    arr1[i], arr2[j] = arr2[j], arr1[i] -> Option D
  4. Quick Check:

    Python swap syntax = arr1[i], arr2[j] = arr2[j], arr1[i] [OK]
Hint: Use Python tuple unpacking for swap: a, b = b, a [OK]
Common Mistakes:
  • Assigning arr1[i] before arr2[j] loses original value
  • Using temp variable unnecessarily
  • Using arithmetic swap which can cause errors
3. What will be the content of arr1 and arr2 after running the following code?
arr1 = [1, 5, 9, 10, 15, 20]
arr2 = [2, 3, 8, 13]
i = 5
j = 0
while i >= 0 and j < len(arr2):
    if arr1[i] > arr2[j]:
        arr1[i], arr2[j] = arr2[j], arr1[i]
        i -= 1
        j += 1
    else:
        i -= 1
arr1.sort()
arr2.sort()
print(arr1)
print(arr2)
medium
A. [1, 5, 8, 10, 13, 15] and [2, 3, 9, 20]
B. [1, 2, 3, 5, 8, 9] and [10, 13, 15, 20]
C. [1, 5, 9, 8, 3, 2] and [20, 15, 10, 13]
D. [1, 3, 5, 8, 9, 10] and [2, 13, 15, 20]

Solution

  1. Step 1: Trace the while loop swaps

    Start with i=5 (arr1[5]=20), j=0 (arr2[0]=2). Since 20 > 2, swap: arr1[5]=2, arr2[0]=20; i=4, j=1.
    Next i=4 (15), j=1 (3): 15 > 3, swap: arr1[4]=3, arr2[1]=15; i=3, j=2.
    i=3 (10), j=2 (8): 10 > 8, swap: arr1[3]=8, arr2[2]=10; i=2, j=3.
    i=2 (9), j=3 (13): 9 > 13? No, so i=1.
    i=1 (5), j=3 (13): 5 > 13? No, so i=0.
    i=0 (1), j=3 (13): 1 > 13? No, so i=-1 loop ends.
    After swaps: arr1 = [1, 5, 9, 8, 3, 2], arr2 = [20, 15, 10, 13].
  2. Step 2: Sort both arrays after swapping

    The code sorts both arrays:
    arr1.sort() -> [1, 2, 3, 5, 8, 9]
    arr2.sort() -> [10, 13, 15, 20]
  3. Final Answer:

    [1, 2, 3, 5, 8, 9] and [10, 13, 15, 20] -> Option B
  4. Quick Check:

    Swapped and sorted arrays = [1,2,3,5,8,9], [10,13,15,20] [OK]
Hint: Swap bigger in arr1 with smaller in arr2, then sort both [OK]
Common Mistakes:
  • Not decrementing i or incrementing j correctly
  • Forgetting to sort arrays after swapping
  • Confusing indices during swaps
4. Identify the error in the following code snippet intended to merge two sorted arrays arr1 and arr2 without extra space:
def merge(arr1, arr2):
    i = 0
    j = 0
    while i < len(arr1) and j < len(arr2):
        if arr1[i] > arr2[j]:
            arr1[i], arr2[j] = arr2[j], arr1[i]
        i += 1
        j += 1
    arr1.sort()
    arr2.sort()
medium
A. Sorting arrays after swapping is unnecessary
B. Swapping elements without checking if arr1[i] is smaller
C. Incrementing both i and j in every iteration causes skipping elements
D. Using while loop instead of for loop causes infinite loop

Solution

  1. Step 1: Analyze loop increments

    Both i and j are incremented every iteration regardless of swap condition, which can skip elements that need comparison.
  2. Step 2: Explain why skipping elements is wrong

    To merge correctly, we must compare all relevant pairs. Incrementing both pointers blindly misses some comparisons, causing incorrect merge.
  3. Final Answer:

    Incrementing both i and j in every iteration causes skipping elements -> Option C
  4. Quick Check:

    Increment both pointers blindly = skip elements [OK]
Hint: Increment pointers only when appropriate to avoid skipping [OK]
Common Mistakes:
  • Incrementing both indices unconditionally
  • Not sorting arrays after swaps
  • Assuming while loop causes infinite loop here
5. Given two sorted arrays arr1 = [1, 4, 7, 8, 10] and arr2 = [2, 3, 9], how can you merge them without extra space so that after merging, arr1 contains the first 5 smallest elements and arr2 contains the remaining elements, both sorted?
hard
A. Use the gap method: compare elements at gap distance and swap if needed, reduce gap until 0
B. Concatenate both arrays and sort the combined array
C. Swap elements only if arr1[i] is greater than arr2[j], then sort both arrays
D. Copy arr2 elements into arr1 and sort arr1

Solution

  1. Step 1: Understand the gap method

    The gap method starts with a gap equal to the sum of lengths divided by 2, compares elements at gap distance across both arrays, and swaps if out of order. The gap reduces each iteration until it becomes zero.
  2. Step 2: Apply gap method to merge without extra space

    This method efficiently merges two sorted arrays in place without extra memory, ensuring both arrays are sorted and merged correctly.
  3. Final Answer:

    Use the gap method: compare elements at gap distance and swap if needed, reduce gap until 0 -> Option A
  4. Quick Check:

    Gap method merges in place without extra space [OK]
Hint: Use gap method to merge by reducing gap and swapping [OK]
Common Mistakes:
  • Trying to concatenate arrays which uses extra space
  • Sorting arrays separately without merging
  • Swapping without systematic gap reduction
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard