精品推荐:
《征服数据结构》专栏:50多种数据结构彻底征服
《经典图论算法》专栏:50多种经典图论算法全部掌握
比亚迪在武汉理工大学宣讲的时候,一网友因为没被排上面试,后来通过询问才知道,比亚迪在筛选简历的时候会卡211,要求本硕都必须是211,。而该网友只有硕士是211,本科不是,所以没有被安排面试。
20年前能上个本科就可以了,10年前读个硕士也能找到好工作,现在就是硕士也不好使,还要求211以上,并且本科也要211以上,学历贬值确实很厉害,无非就是人多,有挑的资本,网友评论到:给他脸了。
————–下面是今天的算法题————–
来看下今天的算法题,这题是LeetCode的第349题:两个数组的交集。
问题描述
输入:nums1 = [1,2,2,1], nums2 = [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
问题分析
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();
}
public:
vector<int> intersection(vector<int> &nums1, vector<int> &nums2) {
unordered_set<int> st(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());
}
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)
数组,稀疏表(Sparse Table),单向链表,双向链表,块状链表,跳表,队列和循环队列,双端队列,单调队列,栈,单调栈,双端栈,散列表,堆,字典树(Trie树),ArrayMap,SparseArray,二叉树,二叉搜索树(BST),笛卡尔树,AVL树,树堆(Treap),FHQ-Treap,哈夫曼树,滚动数组,差分数组,LRU缓存,LFU缓存
……
图的介绍,图的表示方式,邻接矩阵转换,广度优先搜索(BFS),深度优先搜索(DFS),A*搜索算法,迭代深化深度优先搜索(IDDFS),IDA*算法,双向广度优先搜索,迪杰斯特拉算法(Dijkstra),贝尔曼-福特算法(Bellman-Ford),SPFA算法,弗洛伊德算法(Floyd),卡恩(Kahn)算法,基于DFS的拓扑排序,约翰逊算法(Johnson)
……