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 n respectively.
We can start from the end of the new array and begin merging from end to the front.
C++ Code:
/* * func: merge_sorted_array * goal: merge sorted array B into A * @param A: sorted array A * @param m: the size of array A * @param B: sorted array B * @param n: the size of array B * return: */ /* * we can start from the end and backwards * complexity: time O(n+m), space O(1) */ void merge_sorted_array(int A[], int m, int B[], int n){ int k = m + n - 1; while(m > 0 && n > 0){ if(A[m-1] >= B[n-1]){ A[k] = A[m-1]; --k; --m; }else{ A[k] = B[n-1]; --k; --n; } } while(n > 0){ A[k] = B[n-1]; --n; --k; } }
Python Code:
# func: merge two sorted array # @param A: input list A # @param m: length of A # @param B: input list B # @param n: length of B # @return: # complexity: time O(m+n), space O(1) def merge_sorted_array(A, m, B, n): k = m + n - 1 while m > 0 and n > 0: if A[m-1] >= B[n-1]: A[k] = A[m-1] m -= 1 k -= 1 else: A[k] = B[n-1] n -= 1 k -= 1 while n > 0: A[k] = B[n-1] k -= 1 n -= 1
No comments:
Post a Comment