两个有序数组合并

题目描述

给出两个有序的整数数组A和B,请将数组B合并到数组A中,变成一个有序的数组
注意:
可以假设A数组有足够的空间存放B数组的元素,A和B中初始的元素数目分别为m和n

题目分析

1.这里面我们需要用到双指针遍历,两个指针分别从A和B的尾部遍历
2.最开始比较A和B的m,n这个尾部的值,把较大的值赋值给A整体整数数组的尾部,然后指针左移
3.其中到最后,可能有一个先结束,假如B先遍历完,这个时候我们不用管;假如B后遍历完,这个时候我们需要把B数组移到A的最前面

可以参考这个动画:https://uploadfiles.nowcoder.com/images/20201222/9980465_1608625675726/CC10229F9946F5EAF1B6DF9B6A442854

代码如下

public void merge(int A[], int m, int B[], int n) {
        
        int curA = m - 1; //定义一个指针在A末尾
        int curB = n - 1;  //定义一个指针在B末尾
        int index = m + n - 1;  //定义一个在合并后的A数组的末尾
        
        //遍历的条件,二者指针必须都在上面
        while(curA>=0&&curB>=0){
            //必须满足A此时的值,大于B,我们才把A的值移动到末尾
            if(A[curA]>B[curB]){
                A[index--] = A[curA--];
            //A的值要是小于等于B,我们就把B的值移动到末尾
            }else{
                A[index--] = B[curB--];
            }
        }
        
        //此时B没有遍历完,我们把它剩余的移动到合并的下面   
        //这里不用再写A为遍历完的情况,多此一举,本来就是合并到A中
        while(curB >= 0){
            A[index--] = B[curB--];
        }
    }
posted @   Diamond-fz  阅读(141)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示