数组:计算两个有序整型数组的交集

问题描述:

假设两个含有n个元素的有序(非降序)整型数组a和b,其中 a = { 0,1,2 ,3,4 }, b = { 1,3,5,7,9 }.那么他们的交集为{ 1,3 }

实现思路:

1)二路归并法:分别从i,j从头开始遍历两个数组。

若当前遍历的位置a[i]==b[j],则次=此数为两个数组的交集,记录下来,并且继续向后遍历a1,b1.

a[i] > b[j] ,则继续向后遍历b

a[i] < b[j], 则继续向后遍历a[i],直到有一个数组结束遍历即停止。

2)顺序遍历法:顺序遍历两个数组,将数组元素存放到哈希表中,同时对统计的数组元素进行计数,若为2,则为二者的交集元素。

3)散列表法:遍历两个数组中任意一个数组,将遍历得到的元素存放到散列表,然后遍历另外一个数组,同时对建立的散列表进行查询,若存在,则为交集元素。

实现代码:二路归并法

private ArrayList<Integer> mixed(int[] a, int[] b) {
		ArrayList<Integer> mix = new ArrayList<Integer>();
		int alen = a.length;
		int blen = b.length;
		int i=0,j=0;
		while(i<alen && j<blen){
			if(a[i] == b[j]){
				mix.add(a[i]);
				i++;j++;
			}else if(a[i] > b[j]){
				j++;
			}else{
				i++;
			}
		}
		return mix;
	}

测试代码:

@Test
	public void main(){
		int a[] = {0,1,2,3,4};
		int b[] = {1,3,5,7,9};
		ArrayList<Integer> mix = mixed(a,b);
		for(int i:mix){
			System.out.print(i+" ");
		}
	}

效果截图:

对于两个数组长度相差悬殊的情况:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值