Given two sorted integer arrays A and B, merge B into A as one sorted array.
問題描述:給兩個有序的整型數組A和B,A數組長度爲m,B數組長度爲n,前提假設A有足夠大的空間去容納B。
解決思路:分別給A和B兩個指針i和j,當前指向A數組的指針指向的數值大於當前指向B數組的指針的情況下,讓A整個數組往後移,將B指針指向的數值插入A中,然後指針往後移,由於插入一個數值去A數組中,要想數組下標依然指向之前得那個數值,必須也使i++;相反,就只讓A數組指針往後移。還有一種情況必須考慮,如果A數組指針比B數組指針走得快些的話,就讓B數組後面的值直接添加到A數組後面,否則就不做任何處理。
public class Solution {
public void merge(int A[], int m, int B[], int n) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
int i = 0, j = 0, k,count;
while(j < n && i < m){
if(A[i] >= B[j]){
m++;
for(k = m-1; k > i; k--){
A[k] = A[k-1];
}
A[i] = B[j];
i++;
j++;
}
else{
i++;
}
}
if(j < n){
while(j<n){
A[i] = B[j];
i++;
j++;
}
}
}
}
其實這個題目跟之前的Merge
Two Sorted Lists有相通之處,不同的是,找到位置之後,如何進行插入,數組是線性表,易於讀取操作,但是不易於插入刪除,但是鏈表是非線性結構,不易於讀取,但是易於插入刪除。