[leetcode][array]Merge Sorted Array

Given two sorted integer arrays A and B, merge B into A as one sorted array.

Note:
You may assume that A has enough space (size that is greater or equal to m + n) to hold additional elements from B. The number of elements initialized in A and B are mand n respectively.

思路:

覆盖的思路,在题目remove dulplicate from sorted array中相似,在原数组上进行操作而不新建数组的情况下,在不影响原数组数据有效性的情况下,可以将操作结果覆盖到某个原数组中。本题中A在初始化m个元素后有空余空间,可以进行覆盖,所以采取从后向前比较数字并覆盖A的方法。

我原来的思路是A、B两个数组嵌套使用for循环实现遍历两个数组的方法。但是在比较的过程中,由于不确定哪一个数组的下标变化,利用嵌套for循环非常乱。所以使用了while循环,使A、B两个数组循环起来地位相同。使用while循环时需要自己操作参数a、b的增减。且通过实践发现,一个一个比较逻辑比较清晰。

最后细节注意①空集②一个已遍历完另一个还有

代码:

<span style="color:#333333;">public class Solution {
    public void merge(int A[], int m, int B[], int n) {
       if (m == 0) {    //考虑空集情况,但实际只考虑一个为空集即可
			for (int i = 0; i < B.length; i++) {
				A[i] = B[i];
			}
		}
		 int a = m-1 , b = n-1;
		 </span><span style="color:#ff0000;">while(a >= 0 && b >= 0)</span><span style="color:#333333;">{       //一个一个判断,每一次不确定a或b减少,所以不用嵌套for循环,用while,两个a、b同时判断
	    	if (B[b] > A[a]) {
				A[a+b+1] = B[b];
				</span><span style="color:#ff0000;">b--;</span><span style="color:#333333;">
			}else {
				A[a+b+1] = A[a];
				</span><span style="color:#ff0000;">a--;</span><span style="color:#333333;">
			}
	    }
		 if (b >= 0) {     //b的判断条件,如果是a剩下不需要进行再移动,保持即可
			 for (int i = 0; i <= b; i++) {
				A[i] = B[i];
			}
		}
    }
}</span>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值