350. Intersection of Two Arrays II

本文介绍两种计算两个数组交集的方法:暴力破解法和哈希表法。暴力破解法通过双重循环匹配元素并移除已匹配项;哈希表法则利用哈希表统计元素频率,再遍历第二个数组进行匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given two arrays, write a function to compute their intersection.

Example:
Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2, 2].

Note:

  • Each element in the result should appear as many times as it shows in both arrays.
  • The result can be in any order.

Follow up:

  • What if the given array is already sorted? How would you optimize your algorithm?
  • What if nums1's size is small compared to nums2's size? Which algorithm is better?
  • What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?

Subscribe to see which companies asked this question.

【思路一】 暴力破解

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        vector <int>  v;
        int n = nums2.size();
        for(int i =0;i<n;i++){
            for(int j=0;j<nums1.size();j++){
                if(nums2[i]==nums1[j]){
                    v.push_back(nums2[i]);
                    nums1.erase(nums1.begin()+j);
                    break;
                }
                
            }
        }
        return v;
    }
};

【思路二】hash table

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        if(nums1.size()==0 || nums2.size()==0) return vector<int>();
        vector<int> result;
        unordered_map<int, int> hash;
        for(auto val: nums1) hash[val]++;
        for(auto val: nums2)
        {
            if(hash.count(val) && hash[val]>0) result.push_back(val);
            hash[val]--;
        }
        return result;
    }
};


### 哈夫曼编码实现 哈夫曼编码是一种基于字符频率的压缩技术,通过构建一棵二叉树来生成最优前缀码。以下是针对字符串 `'The following code computes the intersection of two arrays'` 的 Python 实现过程。 #### 字符频率统计 首先需要统计输入字符串中每个字符的出现次数。这可以通过遍历字符串并记录每种字符的数量完成[^2]。 ```python from collections import Counter def calculate_frequencies(text): frequencies = Counter(text) return dict(frequencies) text = 'The following code computes the intersection of two arrays' frequencies = calculate_frequencies(text) print("Character Frequencies:", frequencies) ``` #### 构建哈夫曼树 利用字符及其对应的频率数据,可以按照以下方式构建哈夫曼树: 1. 创建一个优先队列(最小堆),其中每个节点表示一种字符以及其频率。 2. 不断取出两个具有最低频率的节点,创建一个新的内部节点作为它们的父亲,并将其频率设置为两子节点频率之和。 3. 将新节点重新加入优先队列,直到只剩下一个根节点为止。 ```python import heapq class HuffmanNode: def __init__(self, char, freq): self.char = char self.freq = freq self.left = None self.right = None def __lt__(self, other): return self.freq < other.freq def build_huffman_tree(freq_dict): priority_queue = [] for char, freq in freq_dict.items(): node = HuffmanNode(char, freq) heapq.heappush(priority_queue, node) while len(priority_queue) > 1: l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值