力扣(349.两个数组的交集)
2023-12-27 04:36:08
给定两个数组?nums1
?和?nums2
?,返回?它们的交集?。输出结果中的每个元素一定是?唯一?的。我们可以?不考虑输出结果的顺序?。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]
题目讲解:
这道题让我们找到两个数组中重复的数,而且不能直接遍历输出,因为他只返回唯一的数,所以我们直接考虑set来实现。把数组1保存在HashSet中,然后遍历数组2的值,如果当前值已存在Set中,则该值为交集。同理,我们将交集保存在Set中去重,最后转换成int数组返回。
代码实现:
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>resset=new HashSet<>();
for(int i:nums1)
{
set1.add(i);
}
for(int i:nums2)
{
if(set1.contains(i))
{
resset.add(i);
}
}
int []arr=new int[resset.size()];
int j=0;
for(int i:resset)
{
arr[j++]=i;
}return arr;
}
}
嗯...因为他是一个有范围的数组,我们也可以用哈西数组来实现:
哈西数组:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int[] hash1 = new int[1002];
int[] hash2 = new int[1002];
for(int i : nums1)
hash1[i]++;
for(int i : nums2)
hash2[i]++;
List<Integer> resList = new ArrayList<>();
for(int i = 0; i < 1002; i++)
if(hash1[i] > 0 && hash2[i] > 0)
resList.add(i);
int index = 0;
int res[] = new int[resList.size()];
for(int i : resList)
res[index++] = i;
return res;
}
}
这个哈西好懵啊整的我,害,经受磨砺把........哭死?
?
?
文章来源:https://blog.csdn.net/jin5413/article/details/135233299
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!