LeetCode --两个排序数组合并问题

Merge Sorted Array 问题:

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

常规思想:

从B的起始位置开始,将选中的值与A数组值逐一判断,找到A[i]大于B[j]的i将其插入,如此迭代下去。

public static void merge(int A[], int m, int B[], int n) {
		if (m == 0) {
			for (int i = 0; i < n; i++) {
				A[i] = B[i];
			}
		}
		int a = 0, b = 0;
		while (b < n) {
			
			while (B[b] >= A[a]&& a < m) {
				a++;
			}
			
			if (a < m) {
				for (int i = m; i > a; i--) {
					A[i] = A[i - 1];
				}
				A[a] = B[b];
			} else {
				A[m] = B[b];
			}
			a++;
			b++;
			m++;
		}

	}
ps ,此方法存在弊端,在每次插入,需要迭代数组,复杂度比较大,O(n*m/2)。

另一种好的方法:

假设 A数组 大小为 m; B数组大小为 n 

由题可知,最后合并成的数组A,大小必定是A+B,也即n+m,既然这样,为什么不从n+m-1位开始,

从 n-1 开始,比较 B[n-1]与A[m-1] 将大的赋值给A[n+m-1],依次迭代下去,

public static void mergeNew(int A[], int m, int B[], int n){
<span style="white-space:pre">		</span>int k=m+n;
<span style="white-space:pre">		</span>while (k-->0) {
<span style="white-space:pre">			</span>A[k]=(n==0||(m>0&&A[m-1]>B[n-1]))?A[--m]:B[--n];
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值