列表

详情


NC313. 两个数组的交集

描述

给定两个整数数组分别为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]也是一个正确的答案

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 3ms, 内存消耗: 452KB, 提交时间: 2022-03-10

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums1 int整型vector 
     * @param nums2 int整型vector 
     * @return int整型vector
     */
	vector<int> intersection(vector<int>& nums1, vector<int>& nums2) 
	{
		vector<bool> marked(1001, false);
		int len1 = nums1.size();
		int len2 = nums2.size();
		vector<int> res;
		for (int i = 0; i < len1; ++i)
		{
			marked[nums1[i]] = true;
		}
		for (int i = 0; i < len2; ++i)
		{
			if (marked[nums2[i]])
			{
				res.push_back(nums2[i]);
				marked[nums2[i]] = false;
			}
		}
		return res;
	}
};

C++ 解法, 执行用时: 3ms, 内存消耗: 468KB, 提交时间: 2022-08-04

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_map<int,int>cnt;
        for(auto x:nums1)
        {
            cnt[x]++;
        }
        vector<int>ans;
        for(auto x:nums2)
        {
            if(cnt[x]>0)
            {
                ans.push_back(x);
                cnt[x]=0;
            }
        }
        return ans;
    }
};

C 解法, 执行用时: 3ms, 内存消耗: 476KB, 提交时间: 2022-04-02

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums1 int整型一维数组 
 * @param nums1Len int nums1数组长度
 * @param nums2 int整型一维数组 
 * @param nums2Len int nums2数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int cmp(const void *a, const void *b)
{
    return *(int *)a - *(int *)b;
}
int* intersection(int* nums1, int nums1Len, int* nums2, int nums2Len, int* returnSize ) {
    // write code here
    int *ans = (int *)malloc(sizeof(int) * 1000);
    int dp[1001] = {0};
    *returnSize = 0;
    //qsort(nums1, nums1Len, sizeof(int), cmp);
    //qsort(nums2, nums2Len, sizeof(int), cmp);
    
    for (int i = 0; i < nums1Len; ++i) {
        dp[nums1[i]]++;
    }
    for (int j = 0; j < nums2Len; ++j) {
        if (dp[nums2[j]] > 0) {
            ans[(*returnSize)++] = nums2[j];
            dp[nums2[j]] = 0;
        }
    }
    return ans;
}

C 解法, 执行用时: 3ms, 内存消耗: 480KB, 提交时间: 2022-06-19

int cmp(const void* a, const void* b) {
    return *(int*)a - *(int*)b;
}
int* intersection(int* nums1, int nums1Len, int* nums2, int nums2Len,
                  int* returnSize ) {
    int* z = (int*)malloc(sizeof(int) * 1000);
    int k[1001] = {0};
    *returnSize = 0;
    for (int i = 0; i < nums1Len; ++i) {
        k[nums1[i]]++;
    }
    for (int j = 0; j < nums2Len; ++j) {
        if (k[nums2[j]] > 0) {
            z[(*returnSize)++] = nums2[j];
            k[nums2[j]] = 0;
        }
    }
    return z;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 488KB, 提交时间: 2022-03-05

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
         int n=nums1.size();
        int n2=nums2.size();
       vector<int>jiao;
        unordered_map<int, int>hashmap;
        for(int i=0;i<n;i++){
         hashmap[nums1[i]]++;
 }
        for(int i=0;i<n2;i++){
            if(hashmap[nums2[i]]!=0){
                jiao.push_back(nums2[i]);
                hashmap[nums2[i]]=0;
            }
            
        }
        return jiao;
    }
};

上一题