一、题目
描述
给定两个整数数组分别为1nums1, 2nums2,找到它们的公共元素并按返回。
数据范围:
1 ≤ nums1.length,nums2.length≤1000
1 ≤ nums1[i],nums2[i]≤1000
示例1
输入:
[1,2 ],[2,2,2,2]
返回值:
[2]
说明:
两个数组的公共元素只有2
示例2
输入:
[1,2,3],[8,2,2,3,8]
返回值:
[2,3]
说明:
两个数组的公共元素为2和3,返回[3,2]也是一个正确的答案
二、思路解析
这道题要频繁地在一个数组中查找某一个元素,而这一点,我们要能立马联想到哈希表这个容器,因为哈希表就是专门用于查找元素的。
并且,我们还可以用数组来模拟哈希表,也就是把 “待查找的元素” 都添加到一个 boolean 数组中。
在这道题中, “待查找的元素”就是两个数组中的任意一个,我暂且称为 a 数组吧。
在把 a 数组的元素都丢到哈希表后,我们再去遍历另一个数组 b,只要在遍历过程中,哈希表中有 b 数组中的元素,我们就把这个元素添加到返回值 ret 数组中。
最后,还有一个小细节:对于重复出现的元素,我们只需要返回一次即可。所以,在把元素添加到 ret 数组后,我们还要把哈希表中的该元素置为 false,防止重复计算。
三、完整代码
import java.util.*;
public class Solution {
public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {
boolean[] hash = new boolean[1010];
for(int x : nums1){
hash[x] = true;
}
ArrayList<Integer> ret = new ArrayList<>();
for(int x : nums2){
if(hash[x]){
ret.add(x);
hash[x] = false;
}
}
return ret;
}
}
以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!