Given two arrays, write a function to compute their intersection.
Example:
Given nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, return [2]
.
Note:
- Each element in the result must be unique.
- The result can be in any order.
Subscribe to see which companies asked this question
首先将nums1存入Hashset的set中,然后判断set中是否包含nums2中的某个元素,将包含的元素存入到resultList中,并对resultList去重,输出result。
发现这种存入元素和去重分部计算效率很低,看到leetcode上一些答案是在存入resultList的时候并把nums1中的相应元素remove,即去重。
存入和去重分开:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class fuzhi {
public int[] intersection(int[] nums1,int[] nums2){
HashSet<Integer> set = new HashSet<Integer>();
for(int i=0;i<nums1.length;i++){
set.add(nums1[i]);
}
List<Integer> resultList = new ArrayList<Integer>();
for(int i =0;i<nums2.length;i++){
if(set.contains(nums2[i])){
resultList.add(nums2[i]);
}
}
//删除重复元素,通过Hashset剔除
HashSet<Integer> h=new HashSet<Integer>(resultList);
resultList.clear();
resultList.addAll(h);
//System.out.println(resultList);
int result[] = new int[resultList.size()];
int i=0;
for(Integer num:resultList){
result[i++]=num;
}
return result;
}
public static void main(String[] args){
int[] nums1={1,2,2,1,3},nums2={3,2,2};
fuzhi r = new fuzhi();
System.out.println(r.intersection(nums1, nums2));
}
}
存入和去重同时:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class fuzhi {
public int[] intersection(int[] nums1,int[] nums2){
HashSet<Integer> set = new HashSet<Integer>();
for(int i=0;i<nums1.length;i++){
set.add(nums1[i]);
}
List<Integer> resultList = new ArrayList<Integer>();
for(int i =0;i<nums2.length;i++){
if(set.contains(nums2[i])){
resultList.add(nums2[i]);
set.remove(nums2[i]);//注意
}
}
int result[] = new int[resultList.size()];
int i=0;
for(Integer num:resultList){
result[i++]=num;
}
return result;
}
public static void main(String[] args){
int[] nums1={1,2,2,1,3},nums2={3,2,2};
fuzhi r = new fuzhi();
System.out.println(r.intersection(nums1, nums2));
}
}