据题意:核心是比较是否相同,所以在哈希表和红黑树中选择,而这里的数字没有大小限制,因此容器最后选择HashSet或TreeSet
思路:将数组一输入hashset中,然后遍历数组2,检查set中是否包含某位数字,包含则将数字输入到结果数组中
实现代码(java)
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
//建立一个哈希表
Set set = new TreeSet();
//建立结果数组
Set resultSet = new TreeSet();
//将第一个数组输入其中
for(int i : nums1)
{
set.add(i);
}
//遍历第二个数组检查是否存在于哈希表中
for(int i : nums2)
{
if(set.contains(i))
{
resultSet.add(i);
}
}
//转化为数组
int[] result = new int[resultSet.size()];
Object[] resultIntegerList = new ArrayList<>(resultSet).toArray();
for (int i = 0; i < resultIntegerList.length; i++)
{
result[i] = (int) resultIntegerList[i];
}
return result;
}
}
所学:①重新复习了红黑树的结构与哈希表的结构,并比较了两者的异同
②哈希表是使用set容器还是自己使用数组承装:若数字范围集中则建议使用数组,反之使用set,因为set在进行哈希值计算时日积月累的也会增大运行时间,但如果数字范围过大(1,1000,5000)时使用数组去表示就太浪费内存了