自己的解答思路:遍历某一个数组,将该数组的所有值都保存在一个map中,并将值置为1;然后遍历第二个数组,如果查找map中的key得到值不为null,说明这个数在第一个数组中有,把他保存在一个列表中。最后将列表的存储的相同值保存到返回数组中。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
HashMap<Integer, Integer> map = new HashMap<>();
List<Integer> list = new ArrayList<>();
int temp = 0;
for (int i = 0; i < nums1.length; i++) {
map.put(nums1[i],map.getOrDefault(nums1[i],1)+1);
}
for (int i = 0; i < nums2.length; i++) {
if(map.get(nums2[i])!=null ){
list.add(nums2[i]);
map.put(nums2[i],null);
temp++;
}
}
int[] result = new int[temp];
for (int i = 0; i < temp; i++) {
result[i] = list.get(i);
}
return result;
}
}
set解法:之前基本没有用过set这个东西,一时间想不起来。
这种方法用了set集合,基本思路差不多。先遍历一个数组,把第一个数组的值放在一个set集合中,注意:set集合是不能有重复元素的。然后遍历第二个数组,查看第二个数组中的每个元素是否在刚才的集合中,如果存在则说明是重复元素,将其加入结果集合中,之后在将结果集合中的元添加到结果数组中即可。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
return new int[0];
}
Set<Integer> set1 = new HashSet<>();
Set<Integer> resultSet = new HashSet<>();
for (int i: nums1) {
set1.add(i);
}
for (int i:nums2) {
if(set1.contains(i))
resultSet.add(i);
}
int[] result = new int[resultSet.size()];
int index = 0;
for (int i:
resultSet) {
result[index++] = i;
}
return result;
}
}