64. 合并排序数组.md

描述

合并两个排序的整数数组A和B变成一个新的数组。

你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。

您在真实的面试中是否遇到过这个题?

样例

给出 A = [1, 2, 3, empty, empty], B = [4, 5]

合并之后 A 将变成 [1,2,3,4,5]

public class Solution {
    /*
     * @param A: sorted integer array A which has m elements, but size of A is m+n
     * @param m: An integer
     * @param B: sorted integer array B which has n elements
     * @param n: An integer
     * @return: nothing
     */
    public void mergeSortedArray(int[] A, int m, int[] B, int n) {
        // write your code here
        
        
        int totalLength = m+n;
        
        while (n != 0 && m != 0) {
            int curA = A[m - 1];
            int curB = B[n - 1];
            if (curA > curB) {
                A[totalLength - 1] = curA;
                m --;
            } else {
                A[totalLength - 1] = curB;
                n --;
            }
            totalLength --;
        }
        //如果数组A的长度为0;前面的直接不执行
        while (n != 0) {
            A[totalLength - 1] = B[n - 1];
            n--;
            totalLength--;
        }
        // while (aSize != 0) {
            
        // }
        
    }
}
public class Solution {
    /*
     * @param A: sorted integer array A which has m elements, but size of A is m+n
     * @param m: An integer
     * @param B: sorted integer array B which has n elements
     * @param n: An integer
     * @return: nothing
     */
   public void mergeSortedArray(int[] A, int m, int[] B, int n) {
        if(n == 0){
            return;
        }
        if(m == 0){
            for(int l = 0 ; l < n ; l++){
    		   A[l] = B[l];
		    }
            return;
        }
        int[] C = new int[m + n];

        int i = 0;
        int j = 0;
        int num = 0;
		boolean flag = false;
        for(; i < m ; ){
            // write your code here
           for(; j < n ; ){
               if(A[i] < B[j]){
                    C[num] = A[i];
                    num++;
                    i++;
				    if(i == m){
					   flag = true;
					   break;
				    } 
               }else{
				    C[num] = B[j];
				    j++;
				    num++;
					if(j == n){
					   flag = true;
					   break;
				    } 
			   }
           }
		   
		   if(flag){
			   break;
		   }
        }
		
		if(i != m){
			for(; i < m ; i++){
			   C[num] = A[i];
			   num++;
		   }
		}
		
		if(j != n){
			for(; j < n ; j++){
			   C[num] = B[j];
			   num++;
		   }
		}
		
		if(num == m + n){
			for(int l = 0 ; l < m+n ; l++){
			   A[l] = C[l];
		   }
		   
		   return;
	   } 
        
    }
}
posted @ 2019-04-02 21:43  故人叹  阅读(111)  评论(0)    收藏  举报