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 andn respectively.
题解:查了资料才想到要从后往前合并。把end初始化为m+n-1,即A在合并后最后一个元素的位置。然后把A和B从后往前比较,较大的元素放在end所指的地方。最后要特别注意B的处理,如果A的元素遍历完了,但是B中的元素还没有全部放到A中去,要再用一个while循环单独处理B。
代码如下:
1 class Solution { 2 public: 3 void merge(int A[], int m, int B[], int n) { 4 int end = m+n-1; 5 int i,j; 6 for(i = m-1,j =n-1;i>=0 && j>=0;){ 7 if(A[i] > B[j]){ 8 A[end] = A[i]; 9 i--; 10 } 11 else{ 12 A[end] = B[j]; 13 j--; 14 } 15 end --; 16 } 17 18 //B中还有元素,继续处理 19 while(j >= 0) 20 { 21 A[end] = B[j]; 22 j--; 23 end--; 24 } 25 } 26 };
【leetcode】Merge Sorted Array,布布扣,bubuko.com
原文:http://www.cnblogs.com/sunshineatnoon/p/3779511.html