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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值