Merge Sorted Array

If use a new array, this problem is fairly easy. The point, to my understanding, is how to do it in place.

Given two sorted integer arrays A and B, merge B into A as one sorted array.

Note:
You may assume that A has enough space (size that is greater or equal to m + n) to hold additional elements from B. The number of elements initialized in A and B are m and nrespectively.


public class Solution {
    public void merge(int A[], int m, int B[], int n) {
        if (n == 0) return;
        
        int pointer = m + n - 1;
        
        m--;
        n--;
        
        while (m >= 0 && n >= 0){
            if (A[m] > B[n]) {
                A[pointer--] = A[m--];
            }else{
                A[pointer--] = B[n--];
            }
        }
        while (m >= 0) {
            A[pointer--] = A[m--];
        }
        while (n >= 0) {
            A[pointer--] = B[n--];
        }
    }
}

In which, pointer can also be replaced by m+n. Therefore not even using new variables.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s