两个有序数组合并
关键点:从后往前进行比较,这样保证数组A有用的部分不会因为在合并的过程中覆盖掉
第15节 有序数组合并练习题
有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。请编写一个方法,将B合并入A并排序。
给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组。
Java (javac 1.7)
代码自动补全
1
import java.util.*;
2
3
public class Merge {
4
public int[] mergeAB(int[] A, int[] B, int n, int m) {
5
//标记A数组和B数组遍历位置的下标
6
int indexA = n - 1;
7
int indexB = m - 1;
8
9
//遍历时标记元素放的位置
10
int index = n - 1 + m;
11
/**
12
* 每一轮遍历,比较的是此时数组A和数组B对应索引所指的元素,挑出最大的放到A数组最后index的位置
13
*/
14
while(indexA >= 0 && indexB >= 0){
15
if(A[indexA] > B[indexB]){
16
A[index] = A[indexA];
17
indexA--;
18
}
19
else{
20
A[index] = B[indexB];
21
indexB--;
22
}
23
index--;
24
}
25
/**
26
* 查看B数组中的元素是否遍历完成,没有遍历完成此时遍历剩余的元素到A中
27
*
28
* A: 4 5 7 10
29
* B:1 2
30
*/
31
while(indexB>=0){
32
A[indexB] = B[indexB];
33
indexB--;
34
}
35
return A;
36
}
37
}
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例
运行
时间: 2024-10-10 18:57:48