两个有序数组合并为一个有序数组

 第一种思路:将数组转为List,然后对list进行排序。主要是采用Arrays的sort()方法排序和list.toArray()转换成数组。

   public static void main(String[] args) {
        int[] a = {12, 32, 63, 84, 105};
        int[] b = {12, 32, 53, 74, 95};
        List<Integer> list1 = new ArrayList<>();
        for (Integer a1 : a){
            list1.add(a1);
        }
 
        List<Integer> list2 = new ArrayList<>();
        for (Integer b1 : b){
            list2.add(b1);
        }
 
        List<Integer> list3 = new ArrayList<>();
        list3.addAll(list1);
        list3.addAll(list2);
 
        Integer[] n = new Integer[list3.size()];
        list3.toArray(n);//这里必须为包装类型
        Arrays.sort(n);
 
        for (Integer i : n){
            System.out.println(i);
        }
    }

第二种思路:比较两个数组的元素,把较小的放在新数组中

    public static void main(String[] args) {
        int[] a = {11, 32, 63, 84, 105};
        int[] b = {12, 32, 53, 74, 95};
        int length1 = a.length;
        int length2 = b.length;
        int newArrayLength = length1 + length2;
        int[] result = new int[newArrayLength];
        int i = 0, j = 0, k = 0;   //i:用于标示a数组    j:用来标示b数组  k:用来标示传入的数组
 
        while (i < length1 && j < length2) {
        /* 元素不管重复与否,直接给合并到一起 */
            //if (a[i] <= b[j]) {
            //    result[k++] = a[i++];
            //} else {
            //    result[k++] = b[j++];
            //}
 
        /* 去重复元素,但是空间利用率还是浪费啦,看结果后面有默认的2个0显示 */
            if (a[i] < b[j]) {
                result[k++] = a[i++];
            } else if (a[i] == b[j]) {
                result[k++] = a[i];
                //在某个位置上2个值相等的话,取哪个都一样,
                // 然后这个相等的位置的2个值都可以不用比啦,都直接向后移动1,继续比较
                j++;
                i++;
            } else {
                result[k++] = b[j++];
            }
        }
 
    /* 后面while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入结果数组 */
        while (i < a.length) {
            result[k++] = a[i++];
        }
 
        while (j < b.length) {
            result[k++] = b[j++];
        }
 
        System.out.println(Arrays.toString(result));
    }

 第三种思路:采用Java 8的Stream API方法(因没用过Java 8,这里后续再更新)

转载于:https://my.oschina.net/alarm1673/blog/1528329

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值