0
点赞
收藏
分享

微信扫一扫

0.1.3、算法——将升序数组 b 合并 到 升序数组 a

泠之屋 2022-01-20 阅读 76

文章目录

题目

升序数组 b,长度为 m , 含参数个数为 m 个。
升序数组 a, 长度为 n+m , 含参数个数为 n 个,且这 n 个数正好位于 a[0]至a[n-1]中。
比如
b [2,4,6]
a [1,3,5,7,null,null,null]

合并后得到 a [1,2,3,4,5,6,7]

关键字

升序、数组、合并

分析

a,b 都是升序,且b合到a。
a 空闲的空间长度等于b的长度。
将b依次从a的非空元素向前比较,需要交换就做交换处理。

代码

public static void main(String[] args) {

        Integer[] b = {2, 4, 6};
        Integer[] a = {1, 3, 5, 7, null, null, null};

        if (Objects.isNull(b) || Objects.isNull(a)) {
            return;
        }
        if (b.length == 0 || a.length == 0) {
            return;
        }
        int aNoNullIndex = a.length - b.length - 1;
        for (int i = b.length - 1; i >= 0; i--) {
            int temABeginIndex = aNoNullIndex;
            //交换逻辑
            while (temABeginIndex >= 0) {

                if (b[i] >= a[temABeginIndex]) {
                    a[temABeginIndex + 1] = b[i];
                    temABeginIndex--;
                    break;
                } else {
                    a[temABeginIndex + 1] = a[temABeginIndex];
                    a[temABeginIndex] = b[i];
                }
                temABeginIndex--;
            }
            aNoNullIndex++;
        }
        System.out.println(Arrays.toString(a));
    }

引申

如果是链表,处理方法类似。当然,如果需要保持 a、b 不变,可以参考 合并两个有序链表(升序)

举报

相关推荐

0 条评论