leetcode 349 两个数组的交集

简介: leetcode 349 两个数组的交集

两个数组的交集


f5ea230726484a74b529aba7a644b71e.png

数组哈希表

建立两个1000大小数组,暴力映射进去。

消耗空间过大。

#include <iostream>
#include<string>
#include<vector>
using namespace std;
class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        vector<int>record1(1000, 0);
        vector<int>record2(1000, 0);
        for (int i = 0; i < nums1.size(); i++)
        {
            record1[nums1[i]]++;
        }
        for (int i = 0; i < nums2.size(); i++)
        {
            record2[nums2[i]]++;
        }
        vector<int>record3;
        for (int i = 0; i < 1000; i++)
        {
            if (record1[i] != 0 && record2[i] != 0) record3.push_back(i);
        }
        return record3;
    }
};
int main()
{
    vector<int> nums1 = { 4,9,5 };
    vector<int> nums2 = { 9,4,9,8,4 };
    Solution a;
    vector<int> nums3 = a.intersection(nums1, nums2);
    for(int i = 0 ;i<nums3.size();i++)
    cout <<nums3[i]<<' ';
    cout << endl;
  return 0;
}

set哈希表

使用unordered_set进行哈希映射,统计数组出现的元素

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> result;
        unordered_set<int> set1(nums1.begin() , nums1.end());
        for (int i = 0; i < nums2.size(); i++)
        {
            if (set1.find(nums2[i]) != set1.end()) 
            {
                result.insert(nums2[i]);
            }
        }
        return vector<int>(result.begin(), result.end());
    }
};

C++11写法 auto关键字

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> result;
        unordered_set<int> set1(nums1.begin() , nums1.end());
        for (auto num : nums2)
        {
            if (set1.find(num) != set1.end()) 
            {
                result.insert(num);
            }
        }
        return vector<int>(result.begin(), result.end());
    }
};


二刷

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        set<int> my_set;
        vector<int> result;
        for(int i=0 ;i<nums1.size();i++)
            my_set.insert(nums1[i]);
        for(int i=0 ;i<nums2.size();i++)
        {
            if(my_set.find(nums2[i]) != my_set.end())
            {
                 my_set.erase(nums2[i]);
                result.push_back(nums2[i]);
            }
        }
        return result;
    }
};

相关文章
|
12天前
|
存储 C语言
Leetcode—— 删除排序数组中的重复项——C语言
Leetcode—— 删除排序数组中的重复项——C语言
|
12天前
|
算法 C语言
Leetcode----旋转数组 ------C语言篇
Leetcode----旋转数组 ------C语言篇
|
7天前
|
索引
【力扣刷题】数组实现栈、后缀表达式(逆波兰表达式)求值、中缀表达式转换为后缀表达式(无括号&&有括号)
【力扣刷题】数组实现栈、后缀表达式(逆波兰表达式)求值、中缀表达式转换为后缀表达式(无括号&&有括号)
13 0
|
9天前
DAY-4 | 力扣 - 求自身以外数组的乘积:区间划分,左右累乘,巧求乘积
该文档是关于LeetCode上的一道题目“Product of Array Except Self”的题解。提供了两种解题方法,一是暴力破解,即计算所有数的乘积后再逐个除以当前元素;二是左右累乘法,通过两次遍历数组分别计算左侧和右侧元素的乘积,避免了除法操作。其中,左右累乘法更优,代码实现中展示了这种方法。
17 1
|
11天前
|
存储 算法
【数据结构与算法 | 基础篇】[数组专题]力扣88
【数据结构与算法 | 基础篇】[数组专题]力扣88
|
12天前
力扣2834. 找出美丽数组的最小和
力扣2834. 找出美丽数组的最小和
|
13天前
力扣421. 数组中两个数的最大异或值(字典树)
力扣421. 数组中两个数的最大异或值(字典树)
|
19天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
16 2
|
19天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
15 0
|
19天前
leetcode代码记录(两个数组的交集
leetcode代码记录(两个数组的交集
12 1