php将两个升序数组ab,合并两个升序数组A和B到数组A

题目

给出两个有序的整数数组A(长度m)和B(长度n) ,请将AB数组合并到数组A中,变成一个有序的数组。

算法思路

合并后数据总长度m+n,最后一个元素的位置为A[m+n-1]

从前(下标0)向后(下标m-1,n-1)合并需要挪动后续元素,复杂度高。因此,我们从后向前合并。

如何合并?初始化当前合并下标lastPos = m+n-1, 当前A数组下标posA = m-1, 当前B数组下标posB = n-1

逐个比大小,A[posA]和B[posB]取较大元素,放入A[lastPos]。取A数组,则posA--; 取B数组则posB--。同时lastPos--

最后如果B数组有剩余,填入A数组即可

关于4和5,如果想问为什么这样就可以达到目的。注意观察,原始A数组中特定位置的数据,要么保持原位不变,要么会向后移动。因此,我们只需要取最大元素,放入lastPos即可

代码实现

public class Solution {

public void merge(int A[], int m, int B[], int n) {

int posA = m-1;

int posB = n-1;

int lastPos = m + n - 1;

while(posA >= 0 && posB >= 0){

if( A[posA] >= B[posB] ){

A[lastPos] = A[posA];

posA --;

}else{

A[lastPos] = B[posB];

posB --;

}

lastPos --;

}

while(posB >= 0){

A[lastPos] = B[posB];

posB -= 1;

lastPos -= 1;

}

}

} 打赏

微信打赏

支付宝打赏

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值