两个数组的交集 II_LeetCode

自己想的一个比较烂的方法,我要是找到比较好的,我会贴在后面.。对此有疑问请回复留言。思路比较简单,都可以看得懂。

 

package day02;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

/**
 * 给定两个数组,编写一个函数来计算它们的交集。
 * 
 * @author JZWen
 * 
 * 思路: 自己的没思路的思路
 * 
 *来说一下我的思路: 两个hashmap 出来, 然后把key里面存那个数组里面的数字,相同的就是直接讲value加1.
 *
 *存完之后再拿出那个size小的hashmap 用他的key  然后去另一个hashmap里面找,
 *
 *找到那个key ,然后比较value 取小的,再在一个新的数据中添加即可。
 *
 */


public class Demo02 {
	
	public static int [] fun(int[] nums1, int[] nums2) {
		
		//尽量创建一个小一点的数组。
		int num[] = new int [nums1.length];
		
		//都是Integer
		HashMap<Integer, Integer> hashmap1 = new HashMap<Integer, Integer>();
		HashMap<Integer, Integer> hashmap2 = new HashMap<Integer, Integer>();
		
		//存hashmap 
		for(int i=0; i<nums1.length; i++) {
			//如果hashmap存在这个key 那就讲value+1
			if(hashmap1.containsKey(nums1[i])) {
				hashmap1.put(nums1[i], (int)hashmap1.get(nums1[i])+1); //  +1
			}else {
				hashmap1.put(nums1[i], 1);
			}
		}
		for(int i=0; i<nums2.length; i++) {
			//如果hashmap存在这个key 那就讲value+1
			if(hashmap2.containsKey(nums2[i])) {
				hashmap2.put(nums2[i], (int)hashmap2.get(nums2[i])+1); //  +1
			}else {
				hashmap2.put(nums2[i], 1);
			}
		}
		//现在直接获取hashmap1的啊
		Set<Integer> keys = hashmap1.keySet() ;
		Iterator<Integer> iter = keys.iterator() ;
		int sign = 0;
		//获取每一个key
		while(iter.hasNext()) {
			Integer it = iter.next();
			if(hashmap2.containsKey(it)) {
				if(hashmap1.get(it) > hashmap2.get(it)) {
					for(int i=0; i<hashmap2.get(it); i++) {
						num[sign] = (int)it;
						sign++;
					}
				}else {
					for(int i=0; i<hashmap1.get(it); i++) {
						num[sign] = (int)it;
						sign++;
					}
				}
			}
		}
		int nums[] = new int [sign];
		for(int i=0; i<sign; i++) {
			nums[i] = num[i];
		}
		return nums;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stu	
		int nums1[] = {4,9,5}, nums2[] = {9,4,9,8,4};
		int nums[] = fun(nums1, nums2);
		for(int i=0; i<nums.length; i++) {
			System.out.println(nums[i]);
		}
	}

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值