描述
合并兩個排序的整數(shù)數(shù)組A和B變成一個新的數(shù)組。
您在真實的面試中是否遇到過這個題滓技? 是
樣例
給出A=[1,2,3,4]撩穿,B=[2,4,5,6]翎碑,返回 [1,2,2,3,4,4,5,6]
挑戰(zhàn)
你能否優(yōu)化你的算法,如果其中一個數(shù)組很大而另一個數(shù)組很猩デ埂光涂?
【思路】
數(shù)組已經(jīng)是排好序,申請一個合并后數(shù)組大小的數(shù)組拧烦,開始比較兩個數(shù)組中的大小遍歷賦值給要合并的數(shù)組忘闻,如果一個數(shù)組遍歷完了,另一個數(shù)組還沒有遍歷結(jié)束恋博,就直接把沒有遍歷完的數(shù)組中的元素賦值給合并的數(shù)組中齐佳。
【代碼實現(xiàn)】
package 數(shù)組和矩陣;
public class Main4 {
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4 };
int[] b = { 2, 4, 5, 6 };
int[] result = mergeSortedArray(a, b);
print(result);
}
private static void print(int[] result) {
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + " ");
}
System.out.println();
}
public static int[] mergeSortedArray(int[] A, int[] B) {
int[] result = new int[A.length + B.length];
int cur = 0;
int i = 0;
int j = 0;
while (i < A.length && j < B.length) {
if (A[i] <= B[j]) {
result[cur++] = A[i];
i++;
} else {
result[cur++] = B[j];
j++;
}
}
while (j <= B.length - 1) {
result[cur++] = B[j++];
}
while (i <= A.length - 1) {
result[cur++] = A[i++];
}
return result;
}
}