LeetCode #349

LeetCode 349是对两个数组求相交的问题。

如果直接使用数组这种数据结构,在处理时的时间复杂性过大。

通过查找资料,选择使用HashSet这种数据结构,可以自动筛选出不重复的字段。

HashSet实现Set的接口,由HashMap支持。保持唯一性的关键是,底层通过hashcode()和equals()方法进行判断。

对于自定义的类需要重写重写equals和hashCode方法以保证唯一性。

在本题的代码中,使用hashSet实现,我的理解是由于添加的是int数组,已重写过,故不需要再次重写。(此处需日后验证)

import java.util.*;
public class Solution {
	public void print(int [] a){
		for(int i = 0; i< a.length; i++){
			System.out.print(a[i]);
	}
		System.out.println();
	}
    public int[] intersection(int[] nums1, int[] nums2) {
	if(nums1.length==0 || nums2.length==0){
		return new int[0];
	}
	Set<Integer> set1 = new HashSet();
	Set<Integer> set2 = new HashSet();
	for(int i = 0; i < nums1.length; i++){
        set1.add(nums1[i]);
    }
	for(int j = 0; j < nums2.length; j++){
		if(set1.contains(nums2[j]))
			set2.add(nums2[j]);
	}
	int [] result = new int[set2.size()];
	int [] setInt = new int[set1.size()];
	int i = 0;
	int j = 0;
	Iterator iter = set2.iterator();
	while(iter.hasNext()){
		result[i++] = (int)iter.next();
	}
	Iterator iter1 = set1.iterator();
	while(iter1.hasNext()){
		setInt[j++] = (int)iter1.next();
	}
	System.out.println("set2=");
	print(result);
	System.out.println("set1=");
	print(setInt);
	return result;
}
public static void main(String [] args){
	Solution so = new Solution();
	int [] a = new int[]{1,2,2,3,1,4,2,3,5};
	int [] b =  new int[]{2,6,5,1,7};
	so.intersection(a,b);
}
}
输出的结果是:

Note: Solution.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
set2=
125
set1=
12345

此处问题具体是哪我还没有搞清楚,留个疑问。

PS:java中的Set是去除重复的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值