【秋招】
秋招中的c和c++主要考察三部分:
- 对于基础知识点的熟练程度
- 对于代码的熟悉程度
- 对于代码编写的熟悉程度
本文主要对于基础知识点的熟练程度进行解析。
哈希冲突
哈希冲突指的是在使用哈希表进行数据存储和查找时,不同的键通过哈希函数计算得到了相同的哈希值,导致这些键被映射到了哈希表的同一个位置。
解决哈希冲突
解决哈希冲突常见的方法有以下几种:
- 开放寻址法:当发生冲突时,按照某种探查方式(如线性探查、二次探查、双重哈希等)在哈希表中寻找下一个空闲的位置来存储冲突的元素。
- 链地址法:在哈希表的每个桶(存储位置)中存储一个链表,所有哈希值相同的元素都存储在对应的链表中。
- 再哈希法:当发生冲突时,使用另一个哈希函数重新计算哈希值,直到找到空闲的位置。
- 建立公共溢出区:将发生冲突的元素都存储到一个公共的溢出区域中。
- 负载因子控制:通过调整哈希表中元素的数量与桶数量的比例(即负载因子),在一定程度上减少冲突的发生。当负载因子超过某个阈值时,对哈希表进行扩容,增加桶的数量。
这些方法各有优缺点,实际应用中通常会根据具体情况选择合适的方法来解决哈希冲突。
什么是平衡二叉树
平衡二叉树是一种特殊的二叉搜索树,它具有以下特点:
- 左右子树的高度差绝对值不超过 1。
- 左右子树也是平衡二叉树。
平衡二叉树的目的是在保证二叉搜索树的有序性的同时,通过自动调整节点的位置来保持树的平衡,从而使得树的查找、插入和删除操作的时间复杂度始终保持在 O (log n),其中 n 是树中节点的数量。常见的平衡二叉树实现有 AVL 树、红黑树等。
常见容器
vector
(向量):动态数组,可以高效地在尾部进行元素的添加和删除操作。list
(链表):元素在内存中不连续存储,适合频繁的插入和删除操作,特别是在中间位置。deque
(双端队列):可以在两端高效地进行插入和删除操作。stack
(栈):遵循后进先出(LIFO)原则。queue
(队列):遵循先进先出(FIFO)原则。priority_queue
(优先队列):元素按照优先级顺序出队。set
(集合):元素唯一且自动排序。multiset
(多重集合):元素可重复且自动排序。map
(映射):存储键值对,键唯一且自动排序。multimap
(多重映射):键可重复且自动排序。unordered_set
(无序集合):元素唯一但不排序,基于哈希表实现。unordered_map
(无序映射):键唯一但不排序,基于哈希表实现。unordered_multiset
(无序多重集合):元素可重复且不排序,基于哈希表实现。unordered_multimap
(无序多重映射):键可重复且不排序,基于哈希表实现。
有malloc为什么引入new
引入 new
操作符相对于 malloc
主要有以下几个优