class Solution {
public:
vector<int> findIntersectionValues(vector<int>& nums1, vector<int>& nums2) {
}
};
100130. 找到两个数组中的公共元素
给你两个下标从 0 开始的整数数组 nums1
和 nums2
,它们分别含有 n
和 m
个元素。
请你计算以下两个数值:
0 <= i < n
中的下标 i
,满足 nums1[i]
在 nums2
中 至少 出现了一次。0 <= i < m
中的下标 i
,满足 nums2[i]
在 nums1
中 至少 出现了一次。请你返回一个长度为 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 。
提示:
n == nums1.length
m == nums2.length
1 <= n, m <= 100
1 <= nums1[i], nums2[i] <= 100
原站题解
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)]