1,题目
2,思路
- 首先判断那个短为什么呢因为我们用短的数组去挨个点名长的数组
- 主要用map装长的数组max
- 判断map里面有几个min数组的元素,list保存交集
- 最后用数组返回list的内容
3,代码
import java.util.*;
public class Leetcode350 {
public static void main(String[] args) {
System.out.println(new Solution350().intersect(new int[]{1, 2}, new int[]{1, 1}));
}
}
class Solution350 {
public int[] intersect(int[] nums1, int[] nums2) {
int[] max = nums1.length >= nums2.length ? nums1 : nums2;//长
int[] min = nums1.length < nums2.length ? nums1 : nums2;//短
List<Integer> list = new ArrayList<>();
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < max.length; i++) {
if (map.containsKey(max[i])) {
map.put(max[i], map.get(max[i]) + 1);
} else {
map.put(max[i], 1);
}
}
for (int i = 0; i < min.length; i++) {
if (map.containsKey(min[i]) && map.get(min[i]) > 0) {
map.put(min[i], map.get(min[i]) - 1);
list.add(min[i]);
}
}
int[] nums3 = new int[list.size()];
for (int i = 0; i < nums3.length; i++) {
nums3[i] = list.get(i);
}
return nums3;
}
}