[Leetcode] merge sorted array 合并数组

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.

题意:给定两已排好的数组,将B合并到A中,A足够长。

思路:归并排序,只不过这题是要保存在A中,题目中的意思是不要开辟新的空间,所以常规的从左到右的归并排序行不通,我们可以从后面开始。这就涉及一个问题了:将数组A和数组B的最后元素相比较后,较大元素放在哪,即下标为多少?因,题中说,A足够大,所以至少m+n个位置,这样我们就可以将较大值放在下标为m+n-1处了。还有一个问题就是,若n>m,这样,主体的算法结束后,我们要考虑,n中的元素如何处理, 毫无疑问,此时m=0了,所以只需将B中的元素对应的赋给A中即可,代码如下:

 1 class Solution {
 2 public:
 3     void merge(int A[], int m, int B[], int n) 
 4     {
 5         if(n==0)    return;
 6 
 7         while(m>0&&n>0)
 8         {
 9             if(A[m-1]>B[n-1])
10             {
11                 A[m+n-1]=A[m-1];
12                 m--;
13             }
14             else
15             {
16                 A[m+n-1]=B[n-1];
17                 n--;
18             }
19         }
20         while(n>0)
21         {
22             A[m+n-1]=B[n-1];  //m不写也行,此时,m=0
23             n--;
24         }
25     }
26 };
原文地址:https://www.cnblogs.com/love-yh/p/7105313.html