合并兩個排序的整數數組A和B變成一個新的數組。 注意事項 你可以假設A具有足夠的空間(A數組的大小大于或等于m+n)去添加B中的元素。 樣例 給出 A = [1, 2, 3, empty, empty], B = [4, 5] 合并之后 A 將變成 [1,2,3,4,5]
最容易想到的方法是將B中的元素先添加到A中然后對A進行一次排序 從另外的角度上來看,這里與歸并排序的原理是一致的,問題在于我們沒有額外的數組空間去容納新的序列,解決的辦法是將A作為額外的數組空間,從尾部開始添加元素,利用A中的剩余空間完成任務.
class Solution { /** * @param A: sorted integer array A which has m elements, * but size of A is m+n * @param B: sorted integer array B which has n elements * @return: void */ public void mergeSortedArray(int[] A, int m, int[] B, int n) { // write your code here // for(int i = 0;i < n; i++){ // A[m + n - i - 1] = B[n - i - 1]; // } // Arrays.sort(A); //從尾部開始填充 int k = m + n -1; m--; n--; while(k>=0){ if(n<0 || (m>=0 && A[m] >= B[n])){ A[k--] = A[m--]; }else{ A[k--] = B[n--]; } } }}新聞熱點
疑難解答