题解 | #合并两个有序的数组#

合并两个有序的数组

https://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665

2022.0821算法第39题合并两个有序的数组
可以在创建一个数组,这样比较简单,
也可以采用双指针对原数组直接进行操作;
刚开始想着从前往后动手,但是没办法绕开插入元素的后移的问题,
交换两者元素也不行这样就破坏了两者的有序性。
之前的删除元素,是考虑两个数不相等的情况,反向思考了一波
这个问题也试着反向思考,从后往前进行,先找出最大的数,存到A数组的最后面,这样不会影响到前面的数值。

首先定义两个数组指针和指向A数组最后的指针。
int a_pos=m-1,b_pos=n-1;
int index=m+n-1;
然后依次判断A,B数组最后两个元素的大小,直到其中某一个到达最前面的位置
其实这里只需要考虑A数组到最前面,B数组还有剩余的情况;
因为如果最后A数组有剩余,那么最终的结果就不需要改动了,直接输出就可以。
while(a_pos>=0&&b_pos>=0){
    if(A[a_pos]>=B[b_pos]){
        A[index--]=A[a_pos];
        a_pos--;
    }
    else{
        A[index--]=B[b_pos];
        b_pos--;
    }
}
针对B数组有剩余的情况,直接把B数组剩余的数全部加到A数组前面即可。
这个情况当时也没想出来,看了解析才明白,分析的还是不够透彻,思路容易乱。
while(b_pos>=0){
    A[index--]=B[b_pos];
    b_pos--;
}






#算法题#
全部评论

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务