两个升序数组合并成一个有序数组

题:两个升序数组合并成一个升序数组。

  • 利用题中数组是生序排列的。代码如下:代码中去除了相同元素
@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]

版权声明:本文为ldxlz224原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。