题:两个升序数组合并成一个升序数组。
- 利用题中数组是生序排列的。代码如下:代码中去除了相同元素
@Test
public void test() {
// 定义两个数组 a ,b 生序排列
int[] a = {1, 3, 11, 34, 444, 555, 9999};
int[] b = {20, 22, 55, 800, 10000, 22222};
// 定义新的存储空间
List<Integer> resultList = new ArrayList<Integer>();
// 利用数组本身就是生序排列的 ,只需要比较每个数组最小的值,将小的加入新的空间,然后小的角标+1,依次循环。
int i = 0;
int j = 0;
while (i < a.length && j < b.length) {
if (a[i] < b[j]) {
// 小的添加到新开辟的空间 然后 i++
resultList.add(a[i++]);
} else if (a[i] > b[j]) {
// 小的添加到新开辟的空间 然后 j++
resultList.add(b[j++]);
} else {
// 如果相同添加进去一个
resultList.add(a[i]);
i++;
j++;
}
}
// 因为原数组是生序排列,如果两个数组长度不同那么必定会有一个数组没有添加完
while (i < a.length) {
resultList.add(a[i++]);
}
while (j < b.length) {
resultList.add(b[j++]);
}
System.out.println(resultList);
}
最终结果如下:
[1, 3, 11, 20, 22, 34, 55, 444, 555, 800, 9999, 10000, 22222]