两个数组的集合的问题-1求重复的出现的数字,出现多次算一次
public static int[] intersection(int[] nums1, int[] nums2) {
// write your code here
if (nums1==null||nums2==null||nums1.length==0||nums2.length==0){
return new int[]{};
}
HashSet<Integer> results= new HashSet<Integer>() ;
HashMap<Integer,Boolean> res= new HashMap();//true代表有值
for (int i=0;i<nums1.length;i++){
res.put(nums1[i],true);
}
for (int i=0;i<nums2.length;i++){
if (res.get(nums2[i])!=null&&res.get(nums2[i])==true){//null判断必须
if (!results.contains(nums2[i]))
{
results.add(nums2[i]);
}
}
}
int[] ress = new int[results.size()];
int i=0;
Iterator iterator = results.iterator();
while (iterator.hasNext()){
ress[i++]=(int)iterator.next();
}
return ress;
}
两个数组的集合的问题-1求重复的出现的数字,出现多次算多次
public int[] intersection(int[] nums1, int[] nums2) {
HashMap<Integer,Integer> recoder = new HashMap();//使用hashMap的性质来解决
ArrayList<Integer> res = new ArrayList<>();//list缓存结果集
for (int i=0;i<nums1.length;i++){
recoder.put(nums1[i],recoder.get(nums1[i])==null?1:recoder.get(nums1[i])+1);
//value的值可能取到的是null,所以给他一个判断,然后value表示出现的次数
}
for (int i=0;i<nums2.length;i++){
if (recoder.get(nums2[i])!=null&&recoder.get(nums2[i])>0){
res.add(nums2[i]);//加入到结果集中
recoder.put(nums2[i],recoder.get(nums2[i])-1);//加入到结果集中,记录集的个数需要减去1
}
}
int[] result = new int[res.size()];
Iterator iterator = res.iterator();
int i=0;
while (iterator.hasNext()){
result[i++]=(int)iterator.next();
}
return result;
}