题解 | #合并两个有序的数组#
合并两个有序的数组
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--; }