1.给出的两个数组,求数组的交:
例如:{1,2,2,1}和{2,4},输出{2}。
方法1:数组遍历
用数组1中的值分别遍历数组2中的值,相同的值存入集合。
java代码如下:
public int[] intersection(int[] nums1, int[] nums2) {
// Write your code here
int resultnum = 0;
int k = 0;
Set<Integer> result=new HashSet<Integer>();
for (int i = 0;i< nums1.length;i++){
for(int j=0;j< nums2.length;j++){
if(nums1[i]==nums2[j]){
result.add(nums1[i]);
}
}
}
resultnum=result.size();
int[] resultreturn=new int[resultnum];
Iterator<Integer> it=result.iterator();
while(it.hasNext()){
resultreturn[k++]=(it.next()).intValue();
}
return resultreturn;
}
这是最简单的一种方法,但是会存在TLE问题,即超时时间限制,代码运行效率比较低,时间复杂度是O(n^2)。
方法2:哈希表
Set<Integer> re = new HashSet<Integer>();
HashMap<Integer, Integer> result = new HashMap<Integer,Integer>();
for(int i=0;i<nums1.length;i++){
result.put(nums1[i], nums1[i]);
}
for(int j=0;j<nums2.length;j++){
if(result.get(nums2[j])!=null){ //the value is already in nums1
re.add(nums2[j]);
}
}
通过将两个数组映射到哈希表中,这样可以在遍历一次数组过程中检测出交集,时间复杂度是O(n),效果得到了优化。