跳转至

2022-10-06 5-2 两个数组的交集

力扣题目:Link

vector的打印

vector(向量容器)内定义了相应的iterator,即迭代器。使用iterator可以检查容器内元素,并实现元素的遍历。

我编写了一个函数,用来打印向量容器内的元素,代码如下:

void printV(vector<int> nums) {
    for (vector<int>::iterator it = nums.begin(); it != nums.end(); it++) {
        cout << it << " ";
    }
    cout << endl;
}

解题思路

先将nums1转化为unordered_set类型的容器,之后通过容器自带函数find()nums1进行查找操作,对nums2遍历比较。

比较的结果存放在新建的unordered_set变量result_set中,并返回整个变量。

代码实现

要注意的是,此时打印函数接收的是整个变量,故接口不能为reference(引用)。

主函数提供了一个测试样例。

全部代码如下:

/* LeetCode Question No.349
 * Given two integer arrays `nums1` and `nums2`, return an array of their
 * intersection. Each element in the result must be unique and you may return
 * the result in any order.
 */

#include <iostream>
#include <vector>
#include <unordered_set>

using namespace std;

class Solution {
public: 
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2){
        unordered_set<int> result_set;
        unordered_set<int> nums_set(nums1.begin(), nums1.end());
        for (int num : nums2) {
            // 发现nums2的元素在nums_set中出现过
            if (nums_set.find(num) != nums_set.end()) {
                result_set.insert(num);
            }
        }
        return vector<int>(result_set.begin(), result_set.end());
    }
    void printV(vector<int> nums){
        for (vector<int>::iterator it = nums.begin(); it != nums.end(); it++) {
            cout << *it << " ";
        }   
        cout << endl;
    }
};

int main(void){
    vector<int> nums1 = {1, 2, 2, 1};
    vector<int> nums2 = {2, 3, 4};

    Solution sl;

    sl.printV(sl.intersection(nums1, nums2));
    return 0;
}