Given two arrays, write a function to compute their intersection.
Example:
Given nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, return [2, 2]
.
Note:
- Each element in the result should appear as many times as it shows in both arrays.
- The result can be in any order.
public class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
Map<Integer,Integer> s=new HashMap<>();
List<Integer> q=new ArrayList<>();
for(int i:nums1){
s.put(i,s.getOrDefault(i,0)+1);
}
for(int i:nums2){
if(s.containsKey(new Integer(i))){
if(s.get(i)-1<0)
s.remove(i);
else {
s.put(i,s.get(i)-1);
q.add(i);
}
}
}
int[] result=new int[q.size()];
for(int i=0;i<q.size();i++){
result[i]=q.get(i).intValue();
}
return result;
}
}
这是使用HashMap集合的方法解决问题,还有一种方式是首先通过排序将数组排序,然后根据大小顺序依次输出
public class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
Arrays.sort(nums1);
Arrays.sort(nums2);
int[] flag=new int[nums1.length];
int z=0;
for(int i=0,j=0;i<nums1.length&&j<nums2.length;){
if(nums1[i]<nums2[j])i++;
else if(nums1[i]>nums2[j]) j++;
else {
flag[z]=nums1[i];
i++;
z++;
j++;
}
}
int[] result=new int[z];
System.arraycopy(flag,0,result,0,z);
return result;
}
}