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) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
ArrayList<Integer> result = new ArrayList<Integer>();
for(int i = 0; i < nums1.length; i++)
{
if(map.containsKey(nums1[i])) map.put(nums1[i], map.get(nums1[i])+1);
else map.put(nums1[i], 1);
}
for(int i = 0; i < nums2.length; i++)
{
if(map.containsKey(nums2[i]) && map.get(nums2[i]) > 0)
{
result.add(nums2[i]);
map.put(nums2[i], map.get(nums2[i])-1);
}
}
int[] r = new int[result.size()];
for(int i = 0; i < result.size(); i++)
{
r[i] = result.get(i);
}
return r;
}
}
还有一种方法,在求重合时比较常用
public class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
Arrays.sort(nums1);
Arrays.sort(nums2);
int pnt1 = 0;
int pnt2 = 0;
ArrayList<Integer> myList = new ArrayList<Integer>();
while((pnt1 < nums1.length) && (pnt2 < nums2.length)){
if(nums1[pnt1] < nums2[pnt2]) pnt1++;
else if(nums1[pnt1] > nums2[pnt2]) pnt2++;
else {
myList.add(nums1[pnt1]);
pnt1++; pnt2++;
}
}
int len = myList.size();
int[] res = new int[len];
for(int i = 0; i < len; i++){
res[i] = myList.get(i);
}
return res;
}
}
使用while循环,然后对两个数组的索引进行操作,但是前提是这两个数组要是有序的。