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是去除重复的。