Intersection of Two Arrays II

原题




题意

计算两个整形数组的交集。


解题思路

这个题是在计算两个数组的交集,如果数组中的每个元素都不重复,这道题还是很好解的,这个题的难点在于处理数组中重复的元素。就如题目示例给的那样,两个数组都有重复的元素2,这样就不能用常规的比较的方法去解题。我在网上看到有人用Map,感觉挺好理解,具体的实现步骤是:

1.定义一个Map和ArrayList;

2.用一个for循环遍历第一个数组,把数组的元素作为map的key值,value值设为1,如果有重复的元素则把value值加1;

3.用for循环遍历第二个数组,把数组中的元素作为key值判断map中是否存在,如果存在则说明这个元素在两个数组中都存在,接下来再判断这个key对应的value是否大于0,如果都成立,则把这个元素放入list中,接下来把这个key对应的value值减去1,这样做的目的是为了保证两个数组的重复元素一致,比如第一个数组中的某个元素重复出现了2次,而第二个数组中的元素重复出现了三次,那么最后取交集只会取两个,第三次因为对应的value值为0了,所以不存进list中了。

4.定义一个整形数组,遍历list,把list中的值赋给数组,然后return。


实现代码

public int[] intersect(int[] nums1, int[] nums2) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		ArrayList<Integer> list = new ArrayList<Integer>();
		for(int i = 0 ; i<nums1.length ; i++){
			if(map.containsKey(nums1[i])){
				map.put(nums1[i], map.get(nums1[i]) + 1);
			}else{
				map.put(nums1[i], 1);
			}
		}
		for(int j = 0 ; j<nums2.length ; j++){
			if(map.containsKey(nums2[j]) && map.get(nums2[j])>0){
				list.add(nums2[j]);
				map.put(nums2[j], map.get(nums2[j])-1);
			}
		}
		int[] result = new int[list.size()];
		for (int i = 0; i < result.length; i++) {
			result[i] = list.get(i);
		}
		return result;
    }






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值