列表

详情


100130. 找到两个数组中的公共元素

给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,它们分别含有 n 和 m 个元素。

请你计算以下两个数值:

请你返回一个长度为 2 的整数数组 answer ,按顺序 分别为以上两个数值。

 

示例 1:

输入:nums1 = [4,3,2,3,1], nums2 = [2,2,5,2,3,6]
输出:[3,4]
解释:分别计算两个数值:
- nums1 中下标为 1 ,2 和 3 的元素在 nums2 中至少出现了一次,所以第一个值为 3 。
- nums2 中下标为 0 ,1 ,3 和 4 的元素在 nums1 中至少出现了一次,所以第二个值为 4 。

示例 2:

输入:nums1 = [3,4,2,3], nums2 = [1,5]
输出:[0,0]
解释:两个数组中没有公共元素,所以两个值都为 0 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<int> findIntersectionValues(vector<int>& nums1, vector<int>& nums2) { } };

java 解法, 执行用时: 16 ms, 内存消耗: 44.4 MB, 提交时间: 2024-07-16 09:16:28

public class Solution {
    public int[] findIntersectionValues(int[] nums1, int[] nums2) {
        Set<Integer> set1 = Arrays.stream(nums1).boxed().collect(Collectors.toSet());
        Set<Integer> set2 = Arrays.stream(nums2).boxed().collect(Collectors.toSet());
        int cnt1 = (int) Arrays.stream(nums1).filter(set2::contains).count();
        int cnt2 = (int) Arrays.stream(nums2).filter(set1::contains).count();
        return new int[]{cnt1, cnt2};
    }
}

rust 解法, 执行用时: 4 ms, 内存消耗: 2.1 MB, 提交时间: 2024-07-16 09:16:16

use std::collections::HashSet;

impl Solution {
    pub fn find_intersection_values(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<i32> {
        let set1 = nums1.iter().cloned().collect::<HashSet<_>>();
        let set2 = nums2.iter().cloned().collect::<HashSet<_>>();
        let cnt1 = nums1.iter().filter(|&x| set2.contains(x)).count() as i32;
        let cnt2 = nums2.iter().filter(|&x| set1.contains(x)).count() as i32;
        vec![cnt1, cnt2]
    }
}

javascript 解法, 执行用时: 88 ms, 内存消耗: 55.4 MB, 提交时间: 2024-07-16 09:15:56

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var findIntersectionValues = function(nums1, nums2) {
    const set1 = new Set(nums1);
    const set2 = new Set(nums2);
    const cnt1 = nums1.reduce((cnt, x) => cnt + (set2.has(x) ? 1 : 0), 0);
    const cnt2 = nums2.reduce((cnt, x) => cnt + (set1.has(x) ? 1 : 0), 0);
    return [cnt1, cnt2];
};

golang 解法, 执行用时: 12 ms, 内存消耗: 6.6 MB, 提交时间: 2023-12-10 23:49:02

func findIntersectionValues(nums1, nums2 []int) []int {
	set1 := map[int]int{}
	for _, x := range nums1 {
		set1[x] = 1
	}
	set2 := map[int]int{}
	for _, x := range nums2 {
		set2[x] = 1
	}
	
	ans := [2]int{}
	for _, x := range nums1 {
		ans[0] += set2[x]
	}
	for _, x := range nums2 {
		ans[1] += set1[x]
	}
	return ans[:]
}

cpp 解法, 执行用时: 36 ms, 内存消耗: 63.9 MB, 提交时间: 2023-12-10 23:48:24

class Solution {
public:
    vector<int> findIntersectionValues(vector<int> &nums1, vector<int> &nums2) {
        unordered_set<int> set1(nums1.begin(), nums1.end());
        unordered_set<int> set2(nums2.begin(), nums2.end());
        vector<int> ans(2);
        for (int x: nums1) ans[0] += set2.count(x);
        for (int x: nums2) ans[1] += set1.count(x);
        return ans;
    }
};

java 解法, 执行用时: 6 ms, 内存消耗: 43.7 MB, 提交时间: 2023-12-10 23:48:11

class Solution {
    public int[] findIntersectionValues(int[] nums1, int[] nums2) {
        HashSet<Integer> set1 = new HashSet<>();
        for (int x : nums1) {
            set1.add(x);
        }
        HashSet<Integer> set2 = new HashSet<>();
        for (int x : nums2) {
            set2.add(x);
        }

        int[] ans = new int[2];
        for (int x : nums1) {
            if (set2.contains(x)) {
                ans[0]++;
            }
        }
        for (int x : nums2) {
            if (set1.contains(x)) {
                ans[1]++;
            }
        }
        return ans;
    }
}

python3 解法, 执行用时: 56 ms, 内存消耗: 16 MB, 提交时间: 2023-12-10 23:47:59

class Solution:
    def findIntersectionValues(self, nums1: List[int], nums2: List[int]) -> List[int]:
        set1 = set(nums1) # 数组去重
        set2 = set(nums2)
        return [sum(x in set2 for x in nums1),
                sum(x in set1 for x in nums2)]

上一题