首页 > 试题广场 >

两个数组的交集

[编程题]两个数组的交集
  • 热度指数:4610 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定两个整数数组分别为nums1, nums2,找到它们的公共元素并按返回。
数据范围:


示例1

输入

[1,2],[2,2,2,2]

输出

[2]

说明

两个数组的公共元素只有2
示例2

输入

[1,2,3],[8,2,2,3,8]

输出

[2,3]

说明

两个数组的公共元素为2和3,返回[3,2]也是一个正确的答案
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums1 int整型vector 
     * @param nums2 int整型vector 
     * @return int整型vector
     */
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        // write code here
        vector<int> tmp1(1010,0);
        vector<int> tmp2(1010,0);
        vector<int> ret(0);
        int sz1=nums1.size();
        int sz2=nums2.size();
        for(int i=0;i<sz1;i++){
            tmp1[nums1[i]]=1;
        }
        for(int j=0;j<sz2;j++){
                tmp2[nums2[j]]=1;
        }
        for(int k=0;k<=1000;k++){
            if(tmp1[k] && tmp2[k]){
                ret.push_back(k);
            }
        }
        return ret;
    }
};

发表于 2025-09-24 12:15:55 回复(0)
class Solution {
  public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        //1.创建两个set来存放数组nums1和nums2
        set<int> s1,s2;
        //2.遍历set,去重
        for(int i=0;i<nums1.size();i++){
            s1.insert(nums1[i]);
        }
        for(int i=0;i<nums2.size();i++){
            s2.insert(nums2[i]);
        }
        //3.创建res数组存放结果
        vector<int> res;
        //4.范围for遍历s1,在s2中找有没有相同的数,有就把single放到res中
        for(auto single:s1)
        {
            if(s2.find(single)!=s2.end())
            {
                res.push_back(single);
            }
        }
        //5.返回res数组,得到公共元素
        return res;
    }
};
方法二:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
    unordered_set<int> set1(nums1.begin(), nums1.end());  // 一步完成去重
    unordered_set<int> res_set;  // 结果集(自动去重)
    
    for(int num : nums2) {
        if(set1.count(num)) {  // 检查存在性
            res_set.insert(num);
        }
    }
    
    return vector<int>(res_set.begin(), res_set.end());
}

vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
    unordered_set<int> set1(nums1.begin(), nums1.end());  // 一步完成去重
    unordered_set<int> res_set;  // 结果集(自动去重)
    
    for(int num : nums2) {
        if(set1.count(num)) {  // 检查存在性
            res_set.insert(num);
        }
    }
    
    return vector<int>(res_set.begin(), res_set.end());
}

发表于 2025-07-08 23:55:51 回复(0)
哈希
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums1 int整型vector 
     * @param nums2 int整型vector 
     * @return int整型vector
     */
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) 
    {
        int hash1[1010] = {0}, hash2[1010] = {0};
        int n1 = nums1.size(), n2 = nums2.size();

        vector<int> ret;

        for(int x : nums1) hash1[x]++;

        for(int x : nums2) hash2[x]++;

        for(int i = 0; i < 1010; i++)
            if(hash1[i] && hash2[i])
                ret.push_back(i);
        
        return ret;
    }
};


发表于 2025-05-02 17:24:46 回复(0)
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums1 int整型ArrayList
     * @param nums2 int整型ArrayList
     * @return int整型ArrayList
     */
   public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {
        // write code here
        ArrayList<Integer> arrayList=new ArrayList<>();
        Set<Integer> set=new HashSet<>();
        for(int i:nums1){
            set.add(i);
        }

        Set<Integer> set1=new HashSet<>();
        for (int j:nums2){
            if (set.contains(j)&&!arrayList.contains(j)){
                arrayList.add(j);
            }
        }
       
        ;
       
       
        return arrayList;

    }

}
发表于 2024-10-18 20:02:52 回复(0)
package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums1 int整型一维数组 
 * @param nums2 int整型一维数组 
 * @return int整型一维数组
*/
func intersection( nums1 []int ,  nums2 []int ) []int {
    cnt1,cnt2:=map[int]int{},map[int]int{}
    for _,x:=range nums1{
        cnt1[x]++
    }
    for _,x:=range nums2{
        cnt2[x]++
    }
    ans:=[]int{}
    for k,_:=range cnt1{
        if _,ok:=cnt2[k];ok{
            ans=append(ans,k)
        }
    }
    return ans
}

func min(a,b int)int{
    if a>b{
        return b
    }
    return a
}

发表于 2023-03-09 08:19:21 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums1 int整型一维数组 
 * @param nums1Len int nums1数组长度
 * @param nums2 int整型一维数组 
 * @param nums2Len int nums2数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
int* intersection(int* nums1, int nums1Len, int* nums2, int nums2Len, int* returnSize ) {
    // write code here
    int* hash=(int *)calloc(1000,sizeof(int));
    int* ans=(int *)malloc(1000*sizeof(int));
    for(int i=0;i<nums1Len;i++){
        hash[nums1[i]-1]=1;
    }
    int count=0;
    for(int j=0;j<nums2Len;j++){
        if(hash[nums2[j]-1]==1){
            hash[nums2[j]-1]+=1;
            if(hash[nums2[j]-1]==2){
                    ans[count++]=nums2[j];
        }
        }
    }
    *returnSize=count;
    return ans;

    
}

发表于 2022-12-24 07:52:44 回复(0)
主要考虑重复项
    public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {
        // write code here
        ArrayList<Integer> result = new ArrayList<Integer>();

        for (int i = 0; i < nums1.size(); i++) {
            if (nums2.contains(nums1.get(i))) {
                result.add(nums1.get(i));
                while(nums2.remove(nums1.get(i)));
            }
        }

        return result;
    }

发表于 2022-09-21 21:55:40 回复(0)
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums1 int整型vector 
     * @param nums2 int整型vector 
     * @return int整型vector
     */
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) 
    {
        // write code here
        unordered_set<int> arr1, arr2;
        for(auto& au:nums1)
        {
            arr1.insert(au);
        }
        for(auto& au:nums2)
        {
            arr2.insert(au);
        }
        return GetIntersection(arr1, arr2);
    }
    vector<int> GetIntersection(unordered_set<int>& arr1, unordered_set<int>& arr2)
    {
        if(arr1.size()>arr2.size())
            return GetIntersection(arr2, arr1);
        vector<int> arr3;
        for(auto& au:arr1)
        {
            if(arr2.count(au))
                arr3.push_back(au);
        }
        return arr3;
    }
};

发表于 2022-09-20 17:56:13 回复(0)
class Solution:
    def intersection(self , nums1: List[int], nums2: List[int]) -> List[int]:
        # write code here
        return list(set(nums1) & set(nums2))

发表于 2022-07-09 00:15:24 回复(1)
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums1 int整型ArrayList 
     * @param nums2 int整型ArrayList 
     * @return int整型ArrayList
     */
     public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {
        // write code here
        HashSet<Integer> set = new HashSet<>();
        HashSet<Integer> temp = new HashSet<>();
        ArrayList<Integer> res = new ArrayList<>();

        for (int i = 0;  i < nums1.size(); i++) {
            set.add(nums1.get(i));
        }

        for (int i = 0; i < nums2.size(); i++) {
            if (set.contains(nums2.get(i))) {
                temp.add(nums2.get(i));
            }
        }

        for (int t : temp) {
            res.add(t);
        }

        return res;
    }
}

发表于 2022-06-09 10:02:29 回复(0)
class Solution:
    def intersection(self , nums1: List[int], nums2: List[int]) -> List[int]:
        # write code here
        return list(set(nums1)&set(nums2))

发表于 2022-04-22 15:20:04 回复(0)