剑指offer面试题4扩展题目

题目:给定两个排序数组A和B,将B数组排序到A数组里面,同时保证插入后还是有序的。
算法的思路是利用给定数组都是升序的特点,从指定两个指向数组末尾元素的指针开始,一直比较,将大的数据插入到新的数组末尾哪里。一直循环下去。知道所有数据插入完成。

private static void printInt(int[] arr) {
        // TODO Auto-generated method stub
        System.out.print("{"+arr[0]);
        for (int i = 1; i < arr.length; i++) {
            System.out.print(", "+arr[i]);
        }
        System.out.println("}");
    }
    public static int[] insertArray(int[] arrayOfA, int[] arrayOfB) {

        if (arrayOfA == null || arrayOfB == null)
            return null;
        int[] temp = arrayOfA;
        //数组A的下标
        int indexofA = arrayOfA.length - 1;
        //数组B的下标
        int indexofB = arrayOfB.length - 1;
        //新数组的下标
        int indexofNew = arrayOfA.length + arrayOfB.length-1;
        //新数组的长度
        arrayOfA = new int[arrayOfA.length + arrayOfB.length];
        while (indexofNew >= 0) {
            if (indexofA >= 0 && indexofB >= 0) {//当A B数组都还有元素时候比较元素大小,根据比较结果插入数值
                if (temp[indexofA]>arrayOfB[indexofB]) {
                    arrayOfA[indexofNew--]=temp[indexofA--];
                }else {
                    arrayOfA[indexofNew--]=arrayOfB[indexofB--];
                }
            }else if (indexofA<0 && indexofB>=0) {//如果有一方数组插入完成,那么剩下一方只要插入就够了
                arrayOfA[indexofNew--]=arrayOfB[indexofB--];
            }else if (indexofA>=0&& indexofB<0) {
                arrayOfA[indexofNew--]=temp[indexofA--];
            }
        }
        return arrayOfA;
    }

测试数据

    int[] arra=new int[]{1,3,7,9,12,45,47,98,900};  
        int[] arrb=new int[]{-34,3,12,24,30,31,35,36,77,687,901};
        printInt(arra);
        printInt(arrb);
        printInt(insertArray(arra, arrb));

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值