首页 > 技术文章 > leetcode--Merge Sorted Array

obama 2013-08-25 13:02 原文

1.题目描述

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 to hold additional elements from B. The number of elements initialized in A and B are m and n respectively.

2.解法分析

这道题是归并排序的变种,我们知道,归并那一步应该是要有一个O(N+M)的辅助数组的,由于题目中说可以假设A有足够的空间来容纳A和B的内容,那么将A作为辅助数组就很合适,但是这必须要求A的前面n个位置必须先腾出来,以防止B的内容中最大的元素小于A中最小的元素这种极端情况。

class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(n==0)return;
      
      //将A原本的内容向右平移n位
        for(int i=m-1;i>=0;--i)
        {
            A[i+n]=A[i];
        }
        
        //然后以A为辅助空间,进行归并排序
        int i=n;
        int j=0;
        int k=0;
        while(i<=(m+n-1)&&j<n)
        {
            if(A[i]<B[j])
            {
                A[k]=A[i];i++;
            }
            else
            {
                A[k]=B[j];j++;
            }
            k++;
        }
        
        while(j<n)
        {
            A[k]=B[j];k++;j++;
        }
        
    }
};

PS:补充说明,以上是第一次写的代码,其实不用腾空间,从大往小排就没问题了。

推荐阅读