leetcode350. 两个数组的交集 II

简单题,10分钟秒杀

题目:

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]

思路:

用一个数组hashTable来存储数组中该数字出现的次数。两个set存数组,遍历找交集,循环输出次数个数字。

代码:

class Solution {
public:
    vector intersect(vector& nums1, vector& nums2) {
        // 使用hashTable存储它的出现次数
        int hashTable1[1100] = {0};
        int hashTable2[1100] = {0};
        set st1, st2; // 放数组
        int i = 0;
        // 遍历,使vector变为set存储,记录数字出现次数
        for(i = 0; i < nums1.size(); i++){
            st1.insert(nums1[i]);
            hashTable1[nums1[i]]++;
        }
        for(i = 0; i < nums2.size(); i++){
            st2.insert(nums2[i]);
            hashTable2[nums2[i]]++;
        }
        vector ans;
        // 遍历找交集,并存交集数字到新数组ans中(存times次)
        for(set::iterator it=st1.begin(); it!=st1.end(); it++){
            if(st2.find(*it) != st2.end()){
                int times = hashTable1[*it];
                if(times > hashTable2[*it]){
                    times = hashTable2[*it];
                }
                while(times != 0){
                    ans.push_back(*it);
                    times--;
                }
            }
        }
        return ans;
    }   
};

运行结果:

leetcode350. 两个数组的交集 II_第1张图片

大佬解法:

class Solution {
public:
    vector intersect(vector& nums1, vector& nums2) {
        // 先对两个数组进行排序,这样好比较
        sort(nums1.begin(), nums1.end());
        sort(nums2.begin(), nums2.end());
        // 定义两个指针,分别指向两个数组
        int p=0, q=0;
        // 设置交集数组
        vector ans;
        // 如果任何一个数组结束了,那么另一个肯定跟他没有交集
        while(p != nums1.size() && q != nums2.size()){
            // 如果一个指针指向的元素比另一个小,则让它++
            if(nums1[p] < nums2[q]){
                p++;
            }else if(nums2[q] < nums1[p]){
                q++;
            }else if(nums1[p] == nums2[q]){ // 指向元素相同,则压入栈
                ans.push_back(nums1[p]);
                p++;
                q++;
            }
        }
        return ans;
    }
};

运行结果:

leetcode350. 两个数组的交集 II_第2张图片

 

你可能感兴趣的:(数据结构,算法)