4/13/2014

Leetcode -- Merge Sorted Array

Very ugly (but work) solution:
class Solution {  
 public:  
   void merge(int A[], int m, int B[], int n) {  
     vector<int> result;  
     int i = 0, j = 0;  
     while(i < m || j < n) {  
       if(i < m && j < n) {  
         if(A[i] <= B[j]) {  
           result.emplace_back(A[i]);  
           i++;  
         } else {  
           result.emplace_back(B[j]);  
           j++;  
         }  
       } else   
       if(i < m) {  
         result.emplace_back(A[i]);  
         i++;  
       } else   
       if(j < n) {  
         result.emplace_back(B[j]);  
         j++;  
       }  
     }  
     for(int i = 0; i < result.size(); ++i) {  
       A[i] = result[i];  
     }  
   }  
 };  
A muce better solution, the key is to insert to A backward
 class Solution {  
 public:  
   void merge(int A[], int m, int B[], int n) {  
     while(m > 0 && n > 0) {  
       if(A[m - 1] > B[n - 1]) {  
         A[m + n - 1] = A[m - 1];  
         m--;  
       } else {  
         A[m + n - 1] = B[n - 1];  
         n--;  
       }  
     }  
     while(n > 0) {  
       A[n - 1] = B[n - 1];  
       n--;  
     }  
   }  
 };  

No comments: