两个已经有序的表的并集

package algorithm;

public class Intersection {
	/**
	 * a和b已经排序,求a,b的并集
	 * @param a
	 * @param b
	 */
	private static void intersection(int a[], int b[]) {
		int i = 0, j = 0, k = 0;
		int n = a.length;
		int m = b.length;
		int c[] = new int[100];
		while (i < n && j < m) {
			if (a[i] == b[j]) {// 相等则用c数组记录下来,i,j共同向后移动一步;
				c[k++] = a[i];
				i++;
				j++;
				while (i < n && a[i - 1] == a[i]) {// 如果等于之后,a或b数组之后出现相同的元素,则直接跳过,因为这个数已经加入到几个c中
													// 这里只处理a或者b跳过即可,
					i++;
				}
			} else if (a[i] < b[j]) {// 如果a[i]<b[j],则a[i]肯定不是a,b交集中的元素,故直接去掉(跳过),去比较a,b中剩余的元素
				i++;
			} else {
				j++;// //如果a[i]>b[j],则b[j]肯定不是a,b交集中的元素,故直接去掉(跳过),去比较a,b中剩余的元素
			}
		}

		for (int e : c) {
			if (e != 0)
				System.out.print(e + " ");
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[] = { 1, 2, 3, 3, 3, 5 };
		int b[] = { 2, 3, 3, 3, 5 };
		intersection(a, b);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值