- 描述
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.
分析
傳統的做法是用輔助數組C存放最終結果,從頭開始逐一比較A和B的元素,然后插入到C中;
本題保證A有足夠的空間,那么它并不想我們創建額外的空間,如果按照傳統方法,比較,插入,那么每插入一個元素,數組A的其余元素都需要依次往后移一位,增加了時間復雜度;
既然A有足夠的空間,那么可以對其預留的空間加以利用,從數組的后面開始掃描,那么完成比較,插入,后續不需要再移動任何元素了。時間復雜度O(m+n),空間復雜度O(1)
public class Solution {
public int[] merge(int[] a, int b[]) {
int i = a.length - 1;
int j = b.length - 1;
int k = a.length + b.length - 1;
while (i >= 0 && j >= 0) {
a[k--] = a[i] < b[j]? b[j--]:a[i--];
}
while (j >= 0) {
a[k--] = b[j--];
}
return a;
}
}