精品推荐

《征服数据结构》专栏:50多种数据结构彻底征服

《经典图论算法》专栏:50多种经典图论算法全部掌握

比亚迪在武汉理工大学宣讲的时候,一网友因为没被排上面试,后来通过询问才知道,比亚迪在筛选简历的时候会卡211,要求本硕都必须是211,。而该网友只有硕士是211,本科不是,所以没有被安排面试。

20年前能上个本科就可以了,10年前读个硕士也能找到好工作,现在就是硕士也不好使,还要求211以上,并且本科也要211以上,学历贬值确实很厉害,无非就是人多,有挑的资本,网友评论到:给他脸了

————–下面是今天的算法题————–

来看下今天的算法题,这题是LeetCode的第349题:两个数组的交集。

问题描述

来源:LeetCode第349题
难度:简单

给定两个数组 nums1 和 nums2 ,返回它们的交集。输出结果中的每个元素一定是唯一 的。我们可以不考虑输出结果的顺序 。
示例1:

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

输出:[2]

示例2:

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

输出:[9,4]

解释:[4,9] 也是可通过的

  • 1 <= nums1.length, nums2.length <= 1000

  • 0 <= nums1[i], nums2[i] <= 1000

问题分析

这题是让计算两个数组的交集,可以把其中一个数组nums1中的元素全部存储到集合set中,然后遍历另一个数组nums2,查找nums2中的元素是否也存在集合set中,如果存在,说明该元素是这两个数组的交集。
JAVA:
public int[] intersection(int[] nums1, int[] nums2) {
    Set<Integer> st = new HashSet<>();
    for (int num : nums1)
        st.add(num);

    Set<Integer> intersect = new HashSet<>();// 存储交集
    for (int num : nums2)
        if (st.contains(num))
            intersect.add(num);

    // 把set转数组并返回
    return intersect.stream().mapToInt(Integer::intValue).toArray();
}
C++:
public:
    vector<intintersection(vector<int> &nums1, vector<int> &nums2) {
        unordered_set<intst(nums1.begin(), nums1.end())// 存储第一个数组的元素
        unordered_set<int> intersect; // 存储交集
        for (int num: nums2)
            if (st.find(num) != st.end())
                intersect.insert(num);

        return vector<int>(intersect.begin(), intersect.end());
    }
Python:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
    st = set(nums1)  # 将nums1转换为集合
    # 存储交集
    intersect = set()
    # 遍历nums2,如果元素在st中,则添加到交集集合
    for num in nums2:
        if num in st:
            intersect.add(num)
    # 将集合转换为列表并返回
    return list(intersect)


笔者简介
博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档
《征服数据结构》专栏

数组稀疏表(Sparse Table)单向链表双向链表块状链表跳表队列和循环队列双端队列单调队列单调栈双端栈散列表字典树(Trie树)ArrayMapSparseArray二叉树二叉搜索树(BST)笛卡尔树AVL树树堆(Treap)FHQ-Treap哈夫曼树滚动数组差分数组LRU缓存LFU缓存

……

《经典图论算法》专栏

图的介绍图的表示方式邻接矩阵转换广度优先搜索(BFS)深度优先搜索(DFS)A*搜索算法迭代深化深度优先搜索(IDDFS)IDA*算法双向广度优先搜索迪杰斯特拉算法(Dijkstra)贝尔曼-福特算法(Bellman-Ford)SPFA算法弗洛伊德算法(Floyd)卡恩(Kahn)算法基于DFS的拓扑排序约翰逊算法(Johnson)

……