题目链接: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 (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 and n respectively.
这道题的要求是将有序数组B合并到有序数组A中,假设A有足够空间容纳B中所有元素。
归并排序中合并的步骤,不过由于是要合并到A中,也就是不申请额外空间,因此,为了减少移动A重元素的次数,考虑从后往前逐步合并:从后往前遍历A和B数组,每次把大的数字从A中m+n位置逐步往前放。
时间复杂度:O(m+n)
空间复杂度:O(1)
1 class Solution
2 {
3 public:
4 void merge(int A[], int m, int B[], int n)
5 {
6 int i = m - 1, j = n - 1, k = m + n - 1;
7 while(j >= 0)
8 {
9 if(i >= 0 && A[i] > B[j])
10 A[k --] = A[i --];
11 else
12 A[k --] = B[j --];
13 }
14 }
15 };