自己想的一个比较烂的方法,我要是找到比较好的,我会贴在后面.。对此有疑问请回复留言。思路比较简单,都可以看得懂。
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]);
}
}
}